Qt主窗口(Top Level Window)

Qt主窗口

Qt有三個主窗口類:QWidget、QDialogue、QMainWindow,主窗口(Top Level Window)就是應用程式最頂層的窗口,通常是由一個選單欄、若干工具欄和一個狀態欄組成。QMainWindow正是這樣的一種佈局,因此通常我們的應用程式主窗口會繼承自QMainWindow,以便獲得QMainWindow提供的各種函式,接著增添需要的元件和功能。

Top Level Window


我們這邊以word為例,分別介紹選單欄、工具條、工作區和狀態欄。

Top Level Window

  • 選單欄(Menubar):用於顯示選單,通常為頂層一橫排。
  • 工具條(Toolbar):中間矩形區域最外層為工具條(Toolbar),Qt 的主窗口支持多個工具條,而且可以並排顯示或分別放置四周,工具條區域內部是停靠元件(Dock Widget),可預設在主窗口的四周任一位置,也可以讓使用者以滑鼠隨意移動位置。
  • 工作區(Central Widget):位於主窗口中間,通常用來顯現結果,並讓使用者在此區域進行操作。
  • 狀態欄(Statusbar):位於底部,當使用者執行某些操作時,可以在狀態欄顯示信息提醒使用者。

Qt 主視窗創建

以下為Qt提供關於窗口操作的函式,我們可依這些函式設置窗口大小和出現的位置,函式主要分兩類,包含框架和不含框架的: 包含框架:x()、y()、pos()、frameGeometry()、move()。 不包含框架:geometry()、width()、height()、rect()、size()。

enter image description here


#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[]){
    QApplication a(argc, argv);
    MainWindow w;           //創造一個主窗口物件
    w.resize(300,300);      //窗口尺寸為300*300
    w.move(100,100);        //窗口移動到距螢幕左上角100*100處
    int windowXPos = w.x(); //窗口左上角x座標
    int windowYPos = w.y(); //窗口左上角y座標
    QRect windowGeometry = w.frameGeometry() //返回的QRect可得窗口長、寬、位置等資訊。   
    w.setWindowTitle(QObject::tr("第一個主視窗")); //設定窗口標題
    w.show();               //在螢幕上秀出窗口
    return a.exec();
}

  1. 前兩行分別引入mainwindow.h標頭檔以及QApplication這個類別。
  2. main()函式創建一個QApplication類別的物件,GUI介面使用QApplication類別,console介面使用QCoreApplication類別,用此來管理Qt程序的生命週期,開啟事件循環等,所以每個Qt應用程式,我們都須創建QApplication物件,再開始創建其他元件。
  3. tr()函式為QObject類別的一個成員函式,因此使用時增加QObject::,可以使用工具提取出tr()函式內的字串,來翻譯成其他語言,所以如果想讓程序實現國際化,那麼就在使用者所有可見的字符串處都使用QObject::tr()。。
  4. app.exec()函式開啟事件循環,事件循環為一段無限循環,不斷等待作業系統或使用者的訊息,直到應用程式結束才停止。