Qt 學習之路 2(7):MainWindow 簡介

來源:互聯網
上載者:User

標籤:pre   photo   版本   建立   分享圖片   添加   圖片   exec   介面   

部落格轉載自: https://www.devbean.net/2012/08/qt-study-road-2-mainwindow/

前面一篇大致介紹了 Qt 各個模組的相關內容,目的是對 Qt 架構有一個高屋建瓴般的瞭解。從現在開始,我們將開始嘗試使用 Qt 開始新的曆程。由於我們已經比較詳細地介紹過訊號槽的相關內容,因此我們可以用一個新的程式開始進一步的學習,同時對訊號槽有一個比較深入的理解。

QMainWindow是 Qt 架構帶來的一個預定義好的主視窗類。所謂主視窗,就是一個普通意義上的應用程式(不是指遊戲之類的那種)最頂層的視窗。比如你現在正在使用的瀏覽器,那麼主視窗就是這個瀏覽器視窗。試著回想一下經典的主視窗,通常是由一個標題列,一個功能表列,若干工具列和一個工作列。在這些子組件之間則是我們的工作區。事實上,QMainWindow正是這樣的一種布局。

下面我們建立一個工程。還記得在建立工程的時候,Qt Creator 通常會協助我們建立一個MainWindow嗎?我們曾經為了介紹訊號槽,將main()函數做了修改。現在我們直接使用 Qt Creator 產生的程式碼來編譯運行一下:

#include <QApplication>#include "mainwindow.h"int main(int argc, char* argv[]){    QApplication app(argc, argv);    MainWindow win;    win.show();    return app.exec();}

在Windows運行結果如下

我們仔細看看這個視窗。雖然不太明顯,但它實際上分成了幾個部分:

主視窗的最上面是 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 的工具箱一樣,可以停靠在主視窗的四周,也可以浮動顯示。主視窗最中間稱為 Central Widget,就是我們程式的工作區。通常我們會將程式最主要的工作區域放置在這裡,類似 Word 的稿紙或者 Photoshop 的畫布等等。

對於一般的 Qt 應用程式,我們所需要做的,就是編寫我們的主視窗代碼,主要是向其中添加各種組件,比如菜單、工具列等,當然,最重要的就是當中的工作區。當我們將這些都處理完畢之後,基本上程式的工具也可以很好地實現。

通常我們的程式主視窗會繼承自QMainWindow,以便獲得QMainWindow提供的各種便利的函數。這也是 Qt Creator 產生的程式碼所做的。

由於QMainWindow這個類在 Qt 5 中並沒有什麼改變,因此上面的代碼可以直接拿到 Qt 4 中進行編譯。事實上,我們使用 Qt Creator 產生的程式碼也是可以直接在 Qt 4 中編譯。只不過需要注意一點:Qt 4 中沒有 widgets 模組,因此在 pro 檔案中,我們通常需要這麼來寫:

QT += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET    = qtdemoTEMPLATE  = appSOURCES  += main.cpp         mainwindow.cppHEADERS  += mainwindow.h

簡單解釋一下 pro 檔案。首先,我們定義了 QT,用於告訴編譯器,需要使用哪些模組。這些模組都在前面章節中有過介紹。我們通常需要添加 core 和 gui。第二行,如果 Qt 的主要版本號(QT_MAJOR_VERSION)大於 4,也就是 Qt 5,則需要另外添加 widgets(因為在 Qt 5 中,所有組件都是在 widgets 模組定義的)。TARGET 是產生的程式的名字。TEMPLATE 是產生 makefile 所使用的模板,比如 app 就是編譯成一個可執行程式,而 lib 則是編譯成一個連結庫(預設是動態連結程式庫)。SOURCES 和 HEADERS 顧名思義,就是項目所需要的原始碼檔案和標頭檔。現在,我們只需使用預設的 pro 檔案即可。以後隨著項目的不斷增大,pro 檔案通常會非常複雜。

Qt 學習之路 2(7):MainWindow 簡介

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.