Qt实现动画的2种方式

由于我之前是写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();
}
  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值