Qt实现动画的2种方式

发布时间:2023年12月18日

由于我之前是写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();
}
文章来源:https://blog.csdn.net/qq_39590763/article/details/135066887
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。