QMainWindow類別提供一個標準的應用程式視窗,當中可以包括選單(QMenuBar)、工具列(QToolBar)、狀態列(QStatusBar)、停駐元件(QDockWidget)等元件。
直接以範例來說明如何使用QMainWindow類別,在當中會有一個文字編輯區、選單、工具列、狀態列與一個停駐元件:
#include <QApplication>
#include <QMainWindow>
#include <QTextEdit>
#include <QMenuBar>
#include <QAction>
#include <QToolBar>
#include <QStatusBar>
#include <QDockWidget>
#include <QLabel>
#include <QPixmap>
int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    
    QMainWindow *mainWindow = new QMainWindow;
    mainWindow->setWindowTitle("QMainWindow");    
    
    // 文字編輯區 
    QTextEdit *textEdit = new QTextEdit;
    textEdit->setFocus();
    mainWindow->setCentralWidget(textEdit);
    
    // 蹦現選單
    QMenu *fileMenu = new QMenu("&File");
    QAction *fileAction = new QAction("Open..", fileMenu);
    // 快捷鍵 Ctrl+O 
    fileAction->setShortcut(Qt::CTRL + Qt::Key_O);
    
    fileMenu->addAction(fileAction);
    fileMenu->addAction("Save");
    fileMenu->addAction("Save as...");
    // 分隔線
    fileMenu->addSeparator();
    // 快捷鍵 Ctrl+X,動作連接至 QApplication 的 quit() 
    fileMenu->addAction("Close", &app, SLOT(quit()), Qt::CTRL + Qt::Key_X);
    
    QMenu *editMenu = new QMenu("&Edit");
    editMenu->addAction("Cut");
    editMenu->addAction("Copy");
    editMenu->addAction("Paste");
    
    QMenu *aboutMenu = new QMenu("&About");
    aboutMenu->addAction("About");
                
    mainWindow->menuBar()->addMenu(fileMenu);
    mainWindow->menuBar()->addMenu(editMenu);
    mainWindow->menuBar()->addMenu(aboutMenu);    
    // 工具列
    QToolBar *toolBar = new QToolBar("QToolBar");
    toolBar->addAction(QIcon("caterpillar_head.jpg"), "caterpillar");
    toolBar->addAction(QIcon("momor_head.jpg"), "momor");
    toolBar->addSeparator();
    toolBar->addAction(QIcon("bush_head.jpg"), "bush");
    mainWindow->addToolBar(toolBar);
    // 狀態列 
    QStatusBar *statusBar = mainWindow->statusBar();
    statusBar->showMessage("Status here...");
    // 停駐元件
    QDockWidget *dockWidget = new QDockWidget("QDockWidget");
    QLabel *label = new QLabel;
    label->setPixmap(QPixmap("caterpillar.jpg"));
    dockWidget->setWidget(label);
    mainWindow->addDockWidget(Qt::RightDockWidgetArea, dockWidget);
     
    mainWindow->show();
    return app.exec();
}QMainWindow的setCentralWidget()用來設定主視窗的中央元件:
mainWindow->setCentralWidget(textEdit);
      
      每個QMenu實例中的選項為QAction的實例,QMenu的addAction()可以直接使用字串,當中會自動產生QAction並加入至QMenu中,而addSeparator()則可以加入分隔線,比較特別的是:
fileMenu->addAction("Close", &app, SLOT(quit()), Qt::CTRL + Qt::Key_X);
      
      這一個版本的addAction()可以直接將QAction的trigger() SIGNAL連接至接收SINGAL的物件之SLOT,並可以設定快捷鍵功能,在上面的程式碼中,按下選單中「Close」,則會使用 QApplication的quit()來關閉應用程式。
每個QMainWindow會具備 QMenuBar與QStatusBar,您可以分別使用menuBar()與statusBar()來取得,程式中使用QMenuBar的 addMenu()加入QMenu實例,使用QStatusBar的showMessage()來設定狀態列文字。
QMainWindow的工具列,則使用addToolBar()來加入QToolBar的實例,至於停駐元件的部份,則是一個類似工具列的圖形元件,但 您可以自行配置當中的元件與功能,Qt::RightDocuWidgetArea設定了元件預設的停駐位置為視窗的右邊,直接來看一下程式的執行畫面, 就可以了解何謂停駐元件,並看看QMainWindow配置的各元件之畫面:


