由于我之前是写java的所以在学习Qt的时候感觉会有点熟悉,因为Qt就是 用c++写,而java底层也是c++实现的
先看效果:
一、使用QMovie
这种方式我目前是用来加载gif图的,很简单噢,只不过我是加载的本地的路径,如果是需要加载资源文件里面的路径我试了一下不知道为啥不成功,路过知道的道友指点一下;
void OnlyTest::slotTestAnim()
{QMovie *movie = new QMovie("C:/Users/qc267/Desktop/pics/girl.gif");bool isResValid = movie->isValid();qDebug()<<" movie.isValid() = "<<isResValid;if(!isResValid){return;}m_anim_label->setMovie(movie);//用一个Qlable来装就行拉movie->start();//开始动画~
}
二、使用样式表
这种方式就很简单咯,就是循环该背景图片
void OnlyTest::initTimer(){//创建定时器testTimer=new QTimer(this);resize(500,500);eventID=startTimer(500);curIndex=0;InitPixmap();//将定时器超时信号与槽练习起来QObject::connect(testTimer,SIGNAL(timeout()),this,SLOT(slotTestTimer()));
}void OnlyTest::timerEvent()
{curIndex++;//图片标号加curIndex = curIndex%39;repaint();
}QList<QString> imageResList;
void OnlyTest::InitPixmap()
{for (int i = 0; i < 39; ++i) {//获取图片资源路径arg函数将数字插入到字符串中。这个函数接受多个参数来指定插入的格式和值。//i+1: 表示要插入的数字,i是一个变量,它的值加1。//2: 表示插入的数字的宽度为2位。如果插入的数字不足2位,则在前面用0进行填充。//10: 表示插入的数字是十进制的。//QLatin1Char('0'): 表示使用字符'0'作为填充的字符,比如数字为1的时候,填充后就是01。QString str = QString(":/res/C:/Users/qc267/Desktop/pics/allpics/%1").arg(i+1,2,10,QLatin1Char('0'));qDebug()<<"str = "<<str;imageResList.append(str);}
}void OnlyTest::slotTestTimer()
{QPushButton* m_anim_content;m_anim_content = new QPushButton("",this);m_anim_content->setFixedSize(769,472);m_vboxlayout->addWidget(m_anim_content);//我是用的一个VBoxLayout来装的pushbutton,直接用ui设计器来写的话就不用这步了//开始运行定时器,时间间隔为1000mstestTimer->start(100);QString mUrl = imageResList[curIndex];qDebug()<<"timer running curIndex = "<< curIndex<<",url = "<<mUrl;QString bgUrl =QString("background-image:url(%1)").arg(mUrl);m_anim_content->setStyleSheet(QString(bgUrl));timerEvent();
}