由于我之前是写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设计器来写的话就不用这步了
//开始运行定时器,时间间隔为1000ms
testTimer->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();
}