Qt Console Application 与 Qt GUI Application互转
在桌面開(kāi)發(fā)中,總的來(lái)說(shuō),包含兩種類(lèi)型的應(yīng)用程序:無(wú)界面的Console程序和有界面的GUI程序。Qt也不例外,包含Qt Console Application和Qt GUI Application。
一、Qt Console Application
在VS2015中創(chuàng)建一個(gè)Qt Console Application,默認(rèn)會(huì)生成一個(gè)main.cpp源文件,代碼如下,
#include <QtCore/QCoreApplication> #include <iostream> //自行添加int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);//如果要打印Hello Qt,直接采用C++中的cout對(duì)象即可std::cout << "Hello Qt" << std::endl;return a.exec(); //開(kāi)始主線程事件循環(huán) }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
解析:在main函數(shù)中主要?jiǎng)?chuàng)建了一個(gè)QCoreApplication類(lèi)的對(duì)象,然后執(zhí)行了這個(gè)對(duì)象的exec操作。?
QCoreApplication類(lèi)繼承自QObject,而QObject類(lèi)是Qt中最基本的類(lèi),所有類(lèi)的基類(lèi)。?
QCoreApplication這個(gè)類(lèi)是整個(gè)應(yīng)用程序的核心,用于程序的初始化,生成事件循環(huán),程序退出等一系列動(dòng)作。
二、Qt GUI Application
三種主窗體
Qt有三種類(lèi)型的主窗體:QDialog, QWidget, QMainWindow。
QWidget?
QWidget類(lèi)是所有用戶(hù)界面對(duì)象的基類(lèi),其中QDialog和QMainWindow繼承自它。?
它有以下的特點(diǎn):- Widget是用戶(hù)界面的基本單元:它從窗口系統(tǒng)接收鼠標(biāo),鍵盤(pán)和其他事件,并在屏幕上繪制自己, 最常見(jiàn)的就是控件(按鈕、編輯框等);
- 每個(gè)Widget都是矩形的,它們按照Z(yǔ)-order進(jìn)行排序;
QDialog?
QDialog類(lèi)是對(duì)話(huà)框窗口的基類(lèi)。一般作為頂級(jí)窗口(沒(méi)有父窗口的窗口稱(chēng)為頂級(jí)窗口)與用戶(hù)交互。?
常見(jiàn)的對(duì)話(huà)框窗口有:文件選擇窗口、顏色和字體選擇窗口等。QMainWindow?
提供一個(gè)有中心部件,菜單條、錨接窗口(例如工具條)和一個(gè)狀態(tài)條的主應(yīng)用程序窗口。
錨接部件?
1. 錨接部件一般多為一個(gè)容器來(lái)使用,以包容其他窗口部件來(lái)實(shí)現(xiàn)功能;?
2. 對(duì)于一個(gè)標(biāo)準(zhǔn)的Qt主窗口而言,錨接部件并不是必須的;?
3. 錨接部件可以作為一個(gè)窗口浮動(dòng)在主窗口的上面,也可以像工具欄一樣停靠在主窗口的上、下、左、右4個(gè)方向;?
4. 一個(gè)主窗口可以包含多個(gè)錨接部件。?
中心部件?
1. 主窗口的中心,一個(gè)主窗口只有一個(gè)中心部件。主窗口有自己的布局管理器,因此不能再給主窗口設(shè)置布局,但是可以給中心部件設(shè)置布局。
創(chuàng)建界面的三種方法
- 手工設(shè)計(jì)界面?
使用手工創(chuàng)建代碼時(shí),需要從Qt已有的GUI類(lèi)庫(kù)中選擇一個(gè)類(lèi)作為基類(lèi)繼承,并且添加必要的其它成員。通常,我們會(huì)選擇從QDialog、 QWidget、QMainWindow等類(lèi)中選擇一個(gè)作為主窗體;然后創(chuàng)建其它的控件,并使用布局管理器布局這些控件;最后將該布局設(shè)置為主窗體的布 局。如下面例子所示,
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
使用Qt Designer設(shè)計(jì)界面?
采用Qt Designer,使得快速創(chuàng)建對(duì)話(huà)框成為可能。在Qt Designer環(huán)境中,所有的操作都采用可視化的操作,可拖放控件、關(guān)聯(lián)信號(hào)與槽、設(shè)置特定控件的屬性。如下圖所示,?動(dòng)態(tài)加載UI文件并生成界面?
前面的兩種方法需要事先創(chuàng)建好相應(yīng)的文件或代碼,然后連同其它文件進(jìn)行編譯,如果后期要修改界面則必須修改代碼或UI文件并重新編譯。?
而不需要重新編譯整個(gè)程序的方法是采用動(dòng)態(tài)加載UI文件的方式。UI文件采用Qt Designer編輯,然后在程序中調(diào)用UI文件,如下面代碼所示,
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
QApplication?
QApplication 類(lèi)管理圖形用戶(hù)界面應(yīng)用程序的控制流和主要設(shè)置。 可以說(shuō) QApplication是Qt的整個(gè)后臺(tái)管理的命脈,它包含主事件循環(huán),在其中來(lái)自窗口系統(tǒng)和其它資源的所有事件被處理和調(diào)度。它也處理應(yīng)用程序的初始化和結(jié)束,并且提供對(duì)話(huà)管理。它也處理絕大多數(shù)系統(tǒng)范圍和應(yīng)用程序范圍的設(shè)置。?
對(duì)于任何一個(gè)使用Qt的圖形用戶(hù)界面應(yīng)用程序,都正好存在一個(gè)QApplication對(duì)象,而不論這個(gè)應(yīng)用程序在同一時(shí)間內(nèi)是不是有0、1、2或更多個(gè)窗口。
三、Qt Widgets、QML、Qt Quick的區(qū)別
QT為了進(jìn)一步的實(shí)現(xiàn)界面和邏輯代碼的分離,引入了Qt Quick庫(kù),可以讓用戶(hù)很方便的配置豐富的應(yīng)用界面。與傳統(tǒng)的Qt Widgets相比,
詳細(xì)可以參見(jiàn)“一去丶二三里”的博客:https://blog.csdn.net/liang19890820/article/details/54141552
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。 https://blog.csdn.net/hhhuang1991/article/details/79795879
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
GUI轉(zhuǎn)為console mode
在main.cpp中的修改main,其他的不改
int main(int argc, char *argv[]) ?//or int main(int argc, char **argv)
{
?? ? //紅色為GUI的code
? ? QApplication a(argc , argv);
? ? //MainWindow w; //改為console mode時(shí)需要屏蔽
? ? //w.show();?//改為console mode時(shí)需要屏蔽
? ? //return a.exec();?//改為console mode時(shí)需要屏蔽
? ? //灰色為console mode的code
????MainWindow RunConsole;
? ? return?RunConsole.RunConsoleMode(argc,argv);
}
在MainWindow 這個(gè)class中定義public?RunConsoleMode(argc,argv)這個(gè)API
RunConsoleMode(int argc, char **argv)
{
? ? for(int i = 0; i<argc ; i++)
? ? {
????? ? printf("**argv[%s]" , argv[i] ); //打印出console mode的輸入?yún)?shù)
????}
}
如cmd輸入:AA.exe -a -b
則argv[0] = "AA.exe" ;?argv[1] ?= "-a" ; ?argv[2] = "-b"
總結(jié)
以上是生活随笔為你收集整理的Qt Console Application 与 Qt GUI Application互转的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: tomcat自动重启
- 下一篇: java mongo 查询数组_Mong