Qt 學習之路 :菜單欄、工具欄和狀態欄


在之前的《添加動作》一文中,我們已經了解了,Qt 將用戶與界面進行交互的元素抽象為一種“動作”,使用QAction類表示。QAction可以添加到菜單上、工具欄上。期間,我們還詳細介紹了一些細節問題,比如資源文件的使用、對象模型以及布局管理器。這一節則是詳細介紹關於菜單欄、工具欄以及狀態欄的相關內容。

我們假設窗口還是建立在QMainWindow類之上,這會讓我們的開發簡單許多。當然,在實際開發過程中,QMainWindow通常只作為“主窗口”,對話框窗口則更多地使用QDialog類。我們會在后面看到,QDialog類會缺少一些QMainWindow類提供方便的函數,比如menuBar()以及toolBar()

 

下面還是回到《添加動作》一文中的代碼片段:

我們看到,使用menuBar()函數,Qt 為我們創建了一個菜單欄。menuBar()QMainWindow提供的函數,因此你是不會在QWidget或者QDialog中找到它的。這個函數會返回窗口的菜單欄,如果沒有菜單欄則會新創建一個。這也就解釋了,為什么我們可以直接使用menuBar()函數的返回值,畢竟我們並沒有創建一個菜單欄對象啊!原來,這就是menuBar()為我們創建好並且返回了的。

Qt 中,表示菜單的類是QMenuBar(你應該已經想到這個名字了)。QMenuBar代表的是窗口最上方的一條菜單欄。我們使用其addMenu()函數為其添加菜單。盡管我們只是提供了一個字符串作為參數,但是 Qt 為將其作為新創建的菜單的文本顯示出來。至於 & 符號,我們已經解釋過,這可以為菜單創建一個快捷鍵。當我們創建出來了菜單對象時,就可以把QAction添加到這個菜單上面,也就是addAction()函數的作用。

下面的QToolBar部分非常類似。顧名思義,QToolBar就是工具欄。我們使用的是addToolBar()函數添加新的工具欄。為什么前面一個是menuBar()而現在的是addToolBar()呢?因為一個窗口只有一個菜單欄,但是卻可能有多個工具欄。如果我們將代碼修改一下:

我們看到,現在有兩個工具欄了:

在 QMainWindow 中添加兩個 QToolBar

工具欄可以設置成固定的、浮動的等等,具體設置可以參考 Qt 文檔。

前面我們說過,使用QAction::setStatusTip()可以設置該動作在狀態欄上的提示文本。但我們現在把鼠標放在按鈕上,是看不到這個提示文本的。原因很簡單,我們沒有添加一個狀態欄。怎么添加呢?類似前面的QMainWindow::menuBar()QMainWindow有一個statusBar()函數。讓我們把這個函數添加上去:

然后編譯運行一下:

QMainWindow 狀態欄

我們添加了一個孤零零的statuBar()顯得不倫不類,但是,同前面的menuBar()的實現類似,這個函數會返回一個QStatusBar對象,如果沒有則先創建再返回。

QStatusBar繼承了QWidget,因此,我們可以將其它任意QWidget子類添加到狀態欄,從而實現類似 Photoshop 窗口底部那種有比例顯示、有網格開關的復雜狀態欄。有關QStatusBar的更多信息,請參考 Qt 文檔。

對於沒有這些函數的QDialog或者QWidget怎么做呢?要記得,QToolBar以及QStatusBar都是QWidget的子類,因此我們就可以將其結合布局管理器添加到另外的QWidget上面。QLayout布局提供了setMenuBar()函數,可以方便的添加菜單欄。具體細節還是詳見文檔。

至此,我們已經將組成窗口元素介紹過一遍。結合這些元素以及布局管理,我們就應該可以實現一個簡單的通用的窗口。當我們完成窗口布局之后,我們就可以考慮向其中添加功能。這就是我們后面章節的內容。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM