国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Qt啟動畫面設置

2019-11-08 02:38:58
字體:
來源:轉載
供稿:網友

[) 學習Qt有一段時間了,發現一個小問題,網上關于Qt的資料或者總結性的學習及應用文章有點少。

比如,Qt完整的API,程序運行之前的啟動畫面如何按理想效果播放等,每次想在項目中添加一些應用的時候,總是找不到好的書籍或文章可以馬上學習、上手。

今天,就把前段時間對啟動畫面播放的學習及嘗試做一個小小的總結。如果對大家有所幫助,那自然好;如果有什么不足或有什么可以改進的地方,還望朋友們多給點意見及建議,謝謝!

過程很簡單,只是建立了一個基于Qt控制臺的項目,文件也只有一個——”main.cpp”。

直接上代碼,注意如果要播放Flash動畫需要引入QAxWidget類,庫文件有QAxContainer.lib,QAxServer.lib等。

1 #include <QtGui> 2 #include <QtGui/Qapplication> 3 #include <QTextCodec> 4 #include <QWidget> 5 #include <ActiveQt/QAxWidget> 6 #include <QTime> 7 8 void gifplay(QLabel *label) 9 {10 label->show();11 }12 13 void gifclose(QLabel *label)14 {15 label->close();16 }17 18 void flashplay(QAxWidget *flash)19 {20 flash->show();21 }22 23 void flashclose(QAxWidget *flash)24 {25 flash->close();26 }27 28 int main(int argc, char *argv[])29 {30 QApplication a(argc, argv);31 32 QTextCodec *codec = QTextCodec::codecForName("GB2312"); //文本為GB2312編碼33 QTextCodec::setCodecForLocale(codec); //設置本地編碼34 QTextCodec::setCodecForCStrings(codec); //設置字符串編碼35 QTextCodec::setCodecForTr(codec);36 37 QAxWidget *flash = new QAxWidget(0,0); //QAxWidget使用的是ActiveX插件38 flash->resize(800,600); //設置該控件的初始大小39 flash->setControl(QString::fromUtf8("{d27cdb6e-ae6d-11cf-96b8-444553540000}")); //設定控制器40 flash->dynamicCall("LoadMovie(long,string)",0,"D://flash1.swf"); //41 flash->setWindowFlags(Qt::FramelessWindowHint); //去除邊框42 flashplay(flash);43 QTime t;44 t.start();45 while(t.elapsed()<5000)46 {47 QApplication::PRocessEvents();48 }49 flashclose(flash);50 51 /*52 QMovie *movie; 53 movie = new QMovie("D://gif1.gif"); 54 QLabel *label=new QLabel ("", 0);55 label->setGeometry( 300, 300, 500, 500 ); 56 label->setMovie(movie); 57 label->setScaledContents(true); 58 movie->start(); 59 gifplay(label);60 t.start();61 while(t.elapsed()<5000)62 {63 QApplication::processEvents();64 }65 gifclose(label); 66 */67 68 return a.exec();69 }

程序開頭做了一些初始化工作,這里就不解釋了,有興趣的朋友可以細細研究下。

關鍵的代碼分為兩段,前一段是針對Flash動畫”.swf”;后一段注釋的是針對”.gif”。

先看第一段,從37行開始,分別為聲明QAxWidget類指針,設置播放畫面大小及控制類別,然后導入需要播放的文件,最好 是絕對路徑。語句flash->setWindowFlags(Qt::FramelessWindowHint);作用是去除播放時的邊框,因為我的目的是播放程序啟動畫面,去除邊框會美觀一點,而且其會自動關閉,不需要關閉等按鈕。

分別給 動畫 播放和關閉定義了獨立方法,雖然也可以直接在主函數中播放和關閉,但為了體現封裝思想以及方面日后添加新功能,還是方法的形式比較易用。

關鍵的是接下來時間設置的部分,因為動畫在Qt控件中播放不會自動關閉,而且,若是簡單地設置等待多少時間然后關閉動畫,那么程序在等待的過程中,動畫也不會正常播放,這也是原先頭疼及花時間最多的地方。

用到了QTime類,開始計時之后,通過elapsed()函數獲取走過時間,若是沒到設定時長,就繼續原先進程,即繼續播放動畫,例子中設定的是5000毫秒。

1 QTime t;2 t.start();3 while(t.elapsed()<5000)4 {5 QApplication::processEvents();6 }

到此,Flash的”.swf”動畫播放及自動關閉功能就實現了,是不是很簡單。

注釋掉的那一段是播放”.gif”動畫的,原理及實現方式類似,只是播放控件不同,用了最常規的QLabel。

這個例子是經過反復測試的,能成功運行并達到理想效果,用的工具是VS2008+Qt4.8.6。

在實際項目中,有些主界面打開會需要花點時間,為了不讓用戶有等待的感覺,可以將一小段動畫加在啟動時段,所以對這方面的學習還是值得與有應用場景的

至于靜態圖像作為啟動畫面也很簡單,Qt有很好用的類:QSplashScreen,QPixmap。例子如下:

------------main.cpp-------------------int main(int argc, char *argv[]){ QApplication app(argc, argv); QTextCodec::setCodecForLocale(QTextCodec::codecForName("gb2312"));//設置本地編碼 QTextCodec::setCodecForCStrings(QTextCodec::codecForName("gb2312"));//設置字符串編碼 QTextCodec::setCodecForTr(QTextCodec::codecForName("gb2312")); QPixmap pixmap(".../images/Splash.PNG"); QSplashScreen splash(pixmap); splash.show(); QTime t; t.start(); while(t.elapsed()<5000) { QApplication::processEvents(); } MainWindow w; w.show(); splash.finish(&w); return app.exec();}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 漾濞| 秦安县| 玉龙| 萍乡市| 颍上县| 来安县| 溧水县| 红原县| 获嘉县| 乐东| 西藏| 黄骅市| 德惠市| 曲麻莱县| 潞城市| 镇宁| 乐安县| 山阴县| 永州市| 深州市| 星子县| 桑植县| 湄潭县| 汤原县| 西充县| 伊宁市| 长春市| 彭泽县| 嵊州市| 宾阳县| 南丹县| 灵山县| 英山县| 长葛市| 永和县| 咸宁市| 瑞丽市| 临汾市| 阜城县| 刚察县| 青河县|