Qt 程序启动gif动画(也有jpg的)

网上找了许久资料,发现都是不行的,其中一个帖子

http://www.cnblogs.com/tlsdba/archive/2012/06/27/2565559.html


给了我一些思路,不过这上面明显是错误的,多线程里面不要有界面的东西,编译器会给警报的,我用上面的例子是直接异常结束掉了。


大体上的错误也是

QPixmap: It is not safe to use pixmaps outside the GUI thread
ASSERT failure in QWidget: "Widgets must be created in the GUI thread.", file kernel/qwidget.cpp, line 1299


然后自己按照这个思路,使用QTimer利用信号和槽进行显示gif图,这样,gif图既可以动,程序又能加载本应该加载的东西。


代码很简单,我还是直接上代码吧!不过有一个小问题是,Sleep和timeout的时间一样,可是gif要停0.几秒才会自己消失,也许是因为信号-槽机制的原因吧!


至于显示gif图有个关闭按钮,这个就不是本文讨论的范畴了,可以自己去重写一下界面撒


MainView.h:

#ifndef MAINVIEW_H
#define MAINVIEW_H

#include <QWidget>
#include <QGridLayout>
#include <QPushButton>
#include <windows.h>
#include <QApplication>
#include <QTimer>

class MainView : public QWidget
{
    Q_OBJECT
public:
    explicit MainView(QWidget *parent = 0);
    QGridLayout *main;
    QPushButton *btn;
    
signals:
    void signals_WakeupApp();
public slots:
private slots:
    void slots_StopStartup();
    void slots_WakeupApp();
private:
    bool startupIsOver;
    
};

#endif // MAINVIEW_H



MainView.cpp


#include "MainView.h"
#include <QDebug>

MainView::MainView(QWidget *parent) :
    QWidget(parent)
{
    startupIsOver = false;
    main = new QGridLayout(this);
    btn = new QPushButton(tr("Just Button"));
    main->addWidget(btn, 0, 0);
    connect(this, SIGNAL(signals_WakeupApp()), this, SLOT(slots_WakeupApp()));
    emit signals_WakeupApp();
    Sleep(3000);

}

void MainView::slots_StopStartup()
{
    startupIsOver = true;
}

void MainView::slots_WakeupApp()
{
    QTimer t;
    connect(&t ,SIGNAL(timeout()), this, SLOT(slots_StopStartup()));
    t.start(3000);
    while(!startupIsOver)
    {
        QApplication::processEvents();
    }
}



Main.cpp


#include <QApplication>
#include <QPixmap>
#include <QSplashScreen>
#include <QLabel>
#include <QMovie>

#include "MainView.h"



int main(int argc, char *argv[])
{
    /*显示jpg的代码*/
//    QApplication a(argc, argv);
//    QPixmap pixmap("1.gif");
//    QSplashScreen splash(pixmap);
//    splash.show();
//    MainView view;
//    view.show();
//    splash.finish(&view);
//    return a.exec();


    /*显示gif代码*/
    QApplication app(argc, argv);

    QMovie *movie;
    movie=new QMovie("1.gif");
    QLabel *label=new QLabel ("", 0);         //初始化qlabel;
    label->setGeometry( 300, 300, 493, 150 );
    label->setMovie(movie);
    label->setScaledContents(true);
    movie->start();
    label->show();
    MainView w;
    w.show();
    label->close();

    return app.exec();
}


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值