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配置的各元件之畫面:

|
|