【Qt筆記】菜單欄、工具欄和狀態欄

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()函數,能夠方便的添加菜單欄。具體細節仍是詳見文檔。

相關文章
相關標籤/搜索