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