QApplication的用法
來源 https://blog.csdn.net/qq_21342281/article/details/85322927
QApplication管理GUI程序的控制流和主要設置。
QApplication包含窗口系統和其他來源處理過和發送過的主事件循環。它也處理應用程序的初始化和收尾工作,並提供對話管理。QApplication可以對系統和應用的大部分設置項進行設置。
對於用Qt寫的任何一個GUI應用,不管這個應用有沒有窗口或多少個窗口,有且只有一個QApplication對象。
而對於用Qt寫的非GUI應用,則有且只有一個QCoreApplication對象,並且這個應用不依賴QtGui庫。
這個QApplication對象的指針可以通過instance()函數獲取,它和一個全局指針--qApp等價。
QApplication的主要功能是:
1、使用所在桌面的參數例如調色板(palette())、字體(font())、雙擊間隔(doubleClickInterval())等信息初始化應用程序。當我們改變桌面的一些設置時,可以讓應用程序的這些設置保持一致。
2、QApplication從底層窗口系統接收事件,並通過sendEvent()或postEvent()發送給需要的窗口。
3、通過解析命令行參數,來設置程序內部狀態。
4、在運行時,可以通過setStyle()函數來改變QApplication包含的一個QStyle對象,從而改變應用程序的外觀。
5、制定程序的顏色策略,詳見setColorSpec()函數說明。
6、通過translate()函數可以設置本地化的字符串。
7、QApplication還包含一些非常方便的類,例如屏幕信息類(desktop())和剪切板類(clipboard())。
8、QApplication包含所有窗口的信息,可以知道程序在屏幕上的位置(widgetAt()),頂層窗口列表(topLevelWidgets()),關閉所有窗口(closeAllWindows())等等。
9、QApplication能夠管理鼠標光標樣式。參照setOverrideCursor();
10、在Linux系統的中,它提供刷新和同步通訊流的函數,參看flushX()和syncX()。
11、QApplication提供全面的與用戶交互界面。當用戶注銷時,可以正常關閉;如果不能終止程序,它能取消關機進程;甚至可以保存程序全部狀態。參看 isSessionRestored(),sessionId() and commitData() and saveState()
既然QApplication做了這么多初始化工作,因此它必須在創建其他與用戶界面相關的類之前創建。QApplication能夠處理命令行參數,所以在想要處理命令行參數之前就要創建它。
頭文件:#include<QApplication>
繼承自:QCoreApplication
一、公共函數
1、QApplication::QApplication(int & argc,char ** argv)
1.1、 使用在argv中包含的argc個命令行參數,初始化窗口系統及應用對象。
1.2、有一個全局的指針app指向應用對象(QApplication)。並且只能創建一個QApplication對象。
1.3、QApplication對象必須在繪制設備(設備包括窗口、像素映射、位圖等)之前創建。
1.4、Qt只將能夠識別的命令行參數,賦值給argv及argc。可識別的命令行參數如下:
1.5、Qt 命令行調試參數(如果Qt編譯時沒有加QT_DEBUG標記,則認為調試參數是無效的)
-nograb:告訴Qt一定不會獲取鼠標和鍵盤事件;
-dograb:忽略-nograb選項功能,不管-nograb選項是否存在命令行參數中;
-sync:只有在X11系統下有效,調試時和調試服務器保持同步;
1.6、所有的Qt程序都支持如下的命令行參數:
-style=風格:設置程序GUI風格。該值可以是關於主題、窗口等。如果你想在編譯Qt時使用風格或者額外的關於風格插件,這個參數可以幫你實現。
-style 樣式:同上;
-stylesheet = 樣式表:設置程序樣式表。這個參數必須是一個包含樣式表的文件;
注意:該文件中樣式表的相對路徑是相對該文件的。
-stylesheet 樣式表:同上;
-session= 會話:從最近的會話中恢復程序。
-session 會話:同上;
-widgetcount:在程序崩潰時,打印崩潰前的幾個窗口信息和最后同時存在的窗口數量。
-reverse:設置程序自動布局方向從右到左,對文字的處理方向從右到左;
-graphicssystem:設置場景窗口和QPixmaps可用的后台支持,有效的參數是raster和opengl
-gmljsdebugger=,通過設置特殊的端口號,激活QML/JS調試器,端口號格式為:1234[,塊],塊是可選的參數。同時使程序等待一個調試器來連接。
1.7、用於X11版本Qt的參數
-display 顯示:設置X顯示,默認值是$DISPLAY
-geometry 位置大小:設置第一個窗口顯示的位置。
-fn 或者-font 字體:設置程序字體。該參數必須是系統能夠識別的。如果Qt程序配置了字體,該參數會被忽略;
-bg或者-background 顏色:設置程序默認的背景色;
2、QApplication::QApplication(int & argc,char ** argv, bool GUIenabled)
如果GUIenabled為true,將創建一個GUI程序,否則創建一個控制台程序(沒有用戶界面的程序);
在X11系統上,如果為false,程序將不會連接X服務器;
3、QApplication::QApplication(int & argc,char ** argv, Type type)
enum QApplication::Type
Constant | Value | Description |
---|---|---|
QApplication::Tty |
0 |
a console application控制台程序 |
QApplication::GuiClient |
1 |
a GUI client application GUI客戶端程序 |
QApplication::GuiServer |
2 |
a GUI server application (for Qt for Embedded Linux) GUI服務器程序(用在嵌入式linux Qt) 和-qws作用相同 |
4、QApplication::QApplication(Display * display,Qt::HANDLE visual = 0, Qt::HANDLE colormap = 0)
創建一個能夠在一個已經開始工作的顯示器上顯示的程序,只在X11系統上有效,並且真彩色位深大於8比特每像素。
5、QApplication::QApplication(Display * display,int & argc, char ** argv,Qt::HANDLE visual = 0, Qt::HANDLE colormap = 0)
同上;
6、QApplication::QApplication(QApplication::QS60MainApplicationFactory factory,int & argc, char ** argv)
用於塞班系統
7、QApplication::~QApplication()
清理程序所有窗口分配的資源;設置全局指針qApp為0;
8、void QApplication::aboutQt()[static slot] 靜態槽函數
顯示一個關於Qt版本等信息的消息對話框。
9、void QApplication::aboutToReleaseGpuResources() [signal]信號
只用在塞班系統中,當程序釋放GPU資源時,觸發該信號。
10、void QApplication::aboutToUseGpuResources() [signal]信號
只用在塞班系統中,當程序使用GPU資源時,觸發該信號。
11、QWidget * QApplication::activePopupWidget() [static]靜態函數
返回一個彈出窗口;彈出窗口是一個特殊的頂層窗口的(將窗口標志設置為Qt::WType_Popup)。當程序打開一個彈出窗口時,所有的事件都將發送給彈出窗口,其他窗口不能操作。
如果已經有彈出窗口,再次彈出窗口時,這個窗口將被放入一個棧中,並返回棧頂的窗口。
12、QWidget * QApplication::activeModalWidget() [static]靜態函數
返回一個活動的模態窗口;模態窗口是一個特殊的頂層窗口,事件循環在模態窗口中,模態模式下不能操作其他窗口部件。
所有的模態窗口被放入一個棧中,這個函數返回棧定的窗口。
13、QWidget * QApplication::activeWindow() [static]靜態函數
返回一個有焦點的窗口頂層窗口,如果返回0,則代表應用程序沒有焦點。
14、void QApplication::alert(QWidget * widget,int msec = 0)
向窗口發出警告,就像windows下任務欄中上的圖標閃現狀態。
15、QWidgetList QApplication::allWidgets()[static]靜態函數
返回應用程序的所有窗口列表。
16、void QApplication::beep() [static]靜態函數
使用默認的音量和鈴聲,發出鈴聲。
17、void QApplication::changeOverrideCursor(constQCursor & cursor) [static]靜態函數
改變光標;使用該函數前必須先設置光標(setOverrideCursor)。
18、QClipboard * QApplication::clipboard() [static]靜態函數
返回一個只向全局粘貼板的指針。
19、void QApplication::closeAllWindows() [static slot]靜態槽函數
關閉所有頂層窗口;例如,文件菜單中的關閉按鈕就與該槽鏈接。窗口的關閉順序是隨機的。默認情況下程序會在所有窗口關閉后退出,除非設置quitOnLastWindowClosed為false;
20、int QApplication::colorSpec() [static]靜態函數
返回最多可用的顏色總數。參見QApplication::setColorSpec().
21、void QApplication::commitData(QSessionManager & manager) [virtual]虛函數
相關的QSessionManager希望應用保存所有數據。也就是,保存所有打開着的並且具有操作權限的文件。
22、 void QApplication::commitDataRequest(QSessionManager & manager) [signal]信號
當QSessionManager向讓程序保存數據時,發射該信號,當連接該信號時,應該使用 Qt::DirectConnection做為connect的第五個參數
23、QDesktopWidget * QApplication::desktop()[static]靜態函數
返回桌面信息QDesktopWidget。
24、bool QApplication::desktopSettingsAware()[static]靜態函數
如果Qt使用系統標准顏色、字體則返回真,否則返回假
25、bool QApplication::event(QEvent * e) [virtual protected]虛受保護函數
QObject::event()的重新實現
26、int QApplication::exec()
進入主循環,知道exit()被調用。
27、void QApplication::focusChanged(QWidget * old,QWidget * now) [signal]信號
焦點改變時,該信號出發。
28、QWidget * QApplication::focusWidget() [static]靜態函數
返回獲得焦點的窗口。
29、QFont QApplication::font()[static]靜態函數
返回程序默認的字體
30、void QApplication::fontDatabaseChanged() [signal]信號
當程序加載或刪除字體時,發送該信號
31、QFontMetrics QApplication::fontMetrics()[static]靜態函數
返回應用程序字體規格(長寬間距等參數)。
32、QInputContext * QApplication::inputContext() const [static]靜態函數
返回應用程序的輸入法(軟件盤)QInputContext:通過模擬發送按鍵事件,實現與鍵盤輸入相同的效果。
33、bool QApplication::isEffectEnabled(Qt::UIEffect effect) [static]靜態函數
如果使用系統的設置(顏色字體等)則返回真,否則返回假。Qt::UIEffect :一個枚舉,描述可用的UI效果。
34、bool QApplication::isLeftToRight()[static]靜態函數
是否從左到右布局。
35、bool QApplication::isRightToLeft()[static]靜態函數
是否從右到左布局。
36、bool QApplication::isSessionRestored() const
應用程序是否從最近一個會話中恢復。
37、Qt::KeyboardModifiers QApplication::keyboardModifiers()
返回當前修飾鍵的狀態。
38、void QApplication::lastWindowClosed()[signal]信號
當最后一個窗口關閉時,發送該信號。
39、Qt::MouseButtons QApplication::mouseButtons()
返回當前鼠標按鍵
41、QCursor * QApplication::overrideCursor()[static]靜態函數
返回光標
42、QPalette QApplication::palette()[static]靜態函數
返回調色板
43、QPalette QApplication::palette(constQWidget * widget)[static]靜態函數
返回窗口部件widget的調色板
44、Qt::KeyboardModifiers QApplication::queryKeyboardModifiers()
返回當前修飾鍵的狀態。注意這是按鍵的實際狀態,與keyboardModifiers不同
45、void QApplication::restoreOverrideCursor()
撤銷上一次setOverrideCursor()操作
46、void QApplication::setActiveWindow(QWidget * active)
設置指定的窗口active為活動窗口,當不能使該窗口獲得鍵盤焦點,若想獲取鍵盤焦點可以使用QWidget::activateWindow()函數
47、void QApplication::setColorSpec(int spec)
設置顏色規格。
48、void QApplication::setDesktopSettingsAware(bool on)
是否使用系統標准設置參數,顏色字體等
49、void QApplication::setFont(constQFont & font, const char * className = 0)
設置字體,如果className給出,將設置指定類className的字體
50、void QApplication::setGraphicsSystem(constQString & system)
設置用於支持窗口部件和QPixmaps等圖像的后端處理,有效的參數:native(本地)、raster(柵格)、opengl(OpenGL)
以下方法設置圖像后端,優先級從高到低:
命令行:graphicssystem
函數:QApplication::setGraphicsSystem
環境變量:QT_GRAPHICSSYSTEM
編譯配置configure:graphicssystem
51、void QApplication::setInputContext(QInputContext * inputContext)
設置QInputContext
52、void QApplication::setOverrideCursor(constQCursor & cursor)
設置光標
53、void QApplication::setPalette(constQPalette & palette, const char * className = 0)
設置調色板
54、void QApplication::setStyle(QStyle * style)
設置程序風格
55、void QApplication::syncX()
在X11桌面系統中,同步X服務器
56、QWidget * QApplication::topLevelAt(constQPoint & point)
返回指定位置的頂層窗口
57、QWidget * QApplication::topLevelAt(int x,int y)
返回指定位置的頂層窗口
58、QWidgetList QApplication::topLevelWidgets()
返回窗口列表
59、Type QApplication::type()
返回程序類型:
QApplication::Tty |
0 |
a console application控制台程序 |
QApplication::GuiClient |
1 |
a GUI client application |
QApplication::GuiServer |
2 |
a GUI server application (for Qt for Embedded Linux) |
60、QWidget * QApplication::widgetAt(constQPoint & point)
返回指定位置的窗口部件
61、QWidget * QApplication::widgetAt(int x,int y)
返回指定位置的窗口部件
-fg或者-foreground 顏色:設置程序默認的前景色;
-btn或者-button 顏色:設置默認的按鈕顏色;
-name 名字:設置程序的名字;
-title標題:設置程序的標題;
-visual TrueColor:在8位顯示屏上強制使用真彩色;
-ncols 數字:在8位顯示屏上,如果使用QApplication::ManyColor,則限制顏色的數量。如果參數為216,則使用6X6X6顏色體,其他值按2X3X1的比例使用;
-cmap:讓程序在8位顯示屏上安裝定制色圖;
-im:設置於服務器相關的輸入方法(相當於設置X調試器XMODIFIERS的環境變量)
-inputstyle:輸入風格樣式
================= End