MainWindow 简介
致介紹了 Qt 各個模塊的相關內容,目的是對 Qt 框架有一個高屋建瓴般的了解。從現在開始,我們將開始嘗試使用 Qt 開始新的歷程。由于我們已經比較詳細地介紹過信號槽的相關內容,因此我們可以用一個新的程序開始進一步的學習,同時對信號槽有一個比較深入的理解。
QMainWindow是 Qt 框架帶來的一個預定義好的主窗口類。所謂主窗口,就是一個普通意義上的應用程序(不是指游戲之類的那種)最頂層的窗口。比如你現在正在使用的瀏覽器,那么主窗口就是這個瀏覽器窗口。試著回想一下經典的主窗口,通常是由一個標題欄,一個菜單欄,若干工具欄和一個任務欄。在這些子組件之間則是我們的工作區。事實上,QMainWindow正是這樣的一種布局。
下面我們新建一個工程。還記得在新建工程的時候,Qt Creator 通常會幫助我們創建一個MainWindow嗎?我們曾經為了介紹信號槽,將main()函數做了修改?,F在我們直接使用 Qt Creator 生成的代碼來編譯運行一下:
| 123456789101112 | #include <QApplication>#include "mainwindow.h"int main(int argc, char* argv[]){????QApplication app(argc, argv);????MainWindow win;????win.show();????return app.exec();} |
在 openSUSE 上運行結果如下:
我們仔細看看這個窗口。雖然不太明顯,但它實際上分成了幾個部分:
主窗口的最上面是 Window Title,也就是標題欄,通常用于顯示標題和控制按鈕,比如最大化、最小化和關閉等。通常,各個圖形界面框架都會使用操作系統本地代碼來生成一個窗口。所以,你會看到在 KDE 上面,主窗口的標題欄是 KDE 樣式的;在 Windows 平臺上,標題欄是 Windows 風格的。如果你不喜歡本地樣式,比如 QQ 這種,它其實是自己將標題欄繪制出來,這種技術稱為 DirectUI,也就是無句柄繪制,這不在本文的討論范疇。Window Title 下面是 Menu Bar,也就是菜單欄,用于顯示菜單。窗口最底部是 Status Bar,稱為狀態欄。當我們鼠標滑過某些組件時,可以在狀態欄顯示某些信息,比如瀏覽器中,鼠標滑過帶有鏈接的文字,你會在底部看到鏈接的實際 URL。
除去上面說的三個橫向的欄,中間是以矩形區域表示。我們可以看出,最外層稱為 Tool Bar Area,用于顯示工具條區域。之所以是矩形表示,是因為,Qt 的主窗口支持多個工具條。你可以將工具條拖放到不同的位置,因此這里說是 Area。我們可以把幾個工具條并排顯示在這里,就像 Word2003 一樣,也可以將其分別放置,類似 Photoshop。在工具條區域內部是 Dock Widget Area,這是??看翱诘娘@示區域。所謂停靠窗口,就像 Photoshop 的工具箱一樣,可以??吭谥鞔翱诘乃闹?#xff0c;也可以浮動顯示。主窗口最中間稱為 Central Widget,就是我們程序的工作區。通常我們會將程序最主要的工作區域放置在這里,類似 Word 的稿紙或者 Photoshop 的畫布等等。
對于一般的 Qt 應用程序,我們所需要做的,就是編寫我們的主窗口代碼,主要是向其中添加各種組件,比如菜單、工具欄等,當然,最重要的就是當中的工作區。當我們將這些都處理完畢之后,基本上程序的工具也可以很好地實現。
通常我們的程序主窗口會繼承自QMainWindow,以便獲得QMainWindow提供的各種便利的函數。這也是 Qt Creator 生成的代碼所做的。
由于QMainWindow這個類在 Qt 5 中并沒有什么改變,因此上面的代碼可以直接拿到 Qt 4 中進行編譯。事實上,我們使用 Qt Creator 生成的代碼也是可以直接在 Qt 4 中編譯。只不過需要注意一點:Qt 4 中沒有 widgets 模塊,因此在 pro 文件中,我們通常需要這么來寫:
| 1 2 3 4 5 6 7 8 9 10 | QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET????= qtdemo TEMPLATE??= app SOURCES??+= main.cpp \ ????????mainwindow.cpp HEADERS??+= mainwindow.h |
簡單解釋一下 pro 文件。首先,我們定義了 QT,用于告訴編譯器,需要使用哪些模塊。這些模塊都在前面章節中有過介紹。我們通常需要添加 core 和 gui。第二行,如果 Qt 的主版本號(QT_MAJOR_VERSION)大于 4,也就是 Qt 5,則需要另外添加 widgets(因為在 Qt 5 中,所有組件都是在 widgets 模塊定義的)。TARGET 是生成的程序的名字。TEMPLATE 是生成 makefile 所使用的模板,比如 app 就是編譯成一個可執行程序,而 lib 則是編譯成一個鏈接庫(默認是動態鏈接庫)。SOURCES 和 HEADERS 顧名思義,就是項目所需要的源代碼文件和頭文件?,F在,我們只需使用默認的 pro 文件即可。以后隨著項目的不斷增大,pro 文件通常會非常復雜。
總結
以上是生活随笔為你收集整理的MainWindow 简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 入门Qt——hello, world
- 下一篇: QML与C++交互:登陆界面设计