Qt 將用戶與界面進行交互的元素抽象爲一種「動做」,使用QAction
類表示。QAction
能夠添加到菜單上、工具欄上。期間,咱們還詳細介紹了一些細節問題,好比資源文件的使用、對象模型以及佈局管理器。這一節則是詳細介紹關於菜單欄、工具欄以及狀態欄的相關內容。函數
咱們假設窗口仍是創建在QMainWindow
類之上,這會讓咱們的開發簡單許多。固然,在實際開發過程當中,QMainWindow
一般只做爲「主窗口」,對話框窗口則更多地使用QDialog
類。咱們會在後面看到,QDialog
類會缺乏一些QMainWindow
類提供方便的函數,好比menuBar()
以及toolBar()
。工具
openAction = new QAction(QIcon(":/images/open_Icon"), tr("&Open..."), this); openAction->setShortcuts(QKeySequence::Open); openAction->setStatusTip(tr("Open an existing file")); connect(openAction, &QAction::triggered, this, &MainWindow::open); QMenu *file = menuBar()->addMenu(tr("&File")); file->addAction(openAction); QToolBar *toolBar = addToolBar(tr("&File")); toolBar->addAction(openAction);
咱們看到,使用menuBar()
函數,Qt 爲咱們建立了一個菜單欄。menuBar()
是QMainWindow
提供的函數,所以你是不會在QWidget
或者QDialog
中找到它的。這個函數會返回窗口的菜單欄,若是沒有菜單欄則會新建立一個。這也就解釋了,爲何咱們能夠直接使用menuBar()
函數的返回值,畢竟咱們並無建立一個菜單欄對象啊!原來,這就是menuBar()
爲咱們建立好而且返回了的。佈局
Qt 中,表示菜單的類是QMenuBar
(你應該已經想到這個名字了)。QMenuBar
表明的是窗口最上方的一條菜單欄。咱們使用其addMenu()
函數爲其添加菜單。儘管咱們只是提供了一個字符串做爲參數,可是 Qt 爲將其做爲新建立的菜單的文本顯示出來。至於 & 符號,咱們已經解釋過,這能夠爲菜單建立一個快捷鍵。當咱們建立出來了菜單對象時,就能夠把QAction
添加到這個菜單上面,也就是addAction()
函數的做用。this
下面的QToolBar
部分很是相似。顧名思義,QToolBar
就是工具欄。咱們使用的是addToolBar()
函數添加新的工具欄。爲何前面一個是menuBar()
而如今的是addToolBar()
呢?由於一個窗口只有一個菜單欄,可是卻可能有多個工具欄。若是咱們將代碼修改一下:code
QToolBar *toolBar = addToolBar(tr("&File")); toolBar->addAction(openAction); QToolBar *toolBar2 = addToolBar(tr("Tool Bar 2")); toolBar2->addAction(openAction);
咱們看到,如今有兩個工具欄了:對象
工具欄能夠設置成固定的、浮動的等等,具體設置能夠參考 Qt 文檔。繼承
前面咱們說過,使用QAction::setStatusTip()
能夠設置該動做在狀態欄上的提示文本。但咱們如今把鼠標放在按鈕上,是看不到這個提示文本的。緣由很簡單,咱們沒有添加一個狀態欄。怎麼添加呢?相似前面的QMainWindow::menuBar()
,QMainWindow
有一個statusBar()
函數。讓咱們把這個函數添加上去:ip
statusBar();
咱們添加了一個孤零零的statuBar()
顯得不三不四,可是,同前面的menuBar()
的實現相似,這個函數會返回一個QStatusBar
對象,若是沒有則先建立再返回。資源
QStatusBar
繼承了QWidget
,所以,咱們能夠將其它任意QWidget
子類添加到狀態欄,從而實現相似 Photoshop 窗口底部那種有比例顯示、有網格開關的複雜狀態欄。有關QStatusBar
的更多信息,請參考 Qt 文檔。開發
對於沒有這些函數的QDialog
或者QWidget
怎麼作呢?要記得,QToolBar
以及QStatusBar
都是QWidget
的子類,所以咱們就能夠將其結合佈局管理器添加到另外的QWidget
上面。QLayout
佈局提供了setMenuBar()
函數,能夠方便的添加菜單欄。具體細節仍是詳見文檔。