qt 状态栏
有段時間沒有寫過博客了。假期去上海旅游,所以一直沒有能夠上網。現在又來到這里,開始新的篇章吧! 今天的內容主要還是繼續完善前面的那個程序。我們要為我們的程序加上一個狀態欄。 狀態欄位于主窗口的最下方,提供一個顯示工具提示等信息的地方。一般地,當窗口不是最大化的時候,狀態欄的右下角會有一個可以調節大小的控制點;當窗口最大化的時候,這個控制點會自動消失。Qt提供了一個QStatusBar類來實現狀態欄。 Qt具有一個相當成熟的GUI框架的實現——這一點感覺比Swing要強一些——Qt似乎對GUI的開發做了很多設計,比如QMainWindow類里面就有一個statusBar()函數,用于實現狀態欄的調用。類似menuBar()函數,如果不存在狀態欄,該函數會自動創建一個,如果已經創建則會返回這個狀態欄的指針。如果你要替換掉已經存在的狀態欄,需要使用QMainWindow的setStatusBar()函數。 在Qt里面,狀態欄顯示的信息有三種類型:臨時信息、一般信息和永久信息。其中,臨時信息指臨時顯示的信息,比如QAction的提示等,也可以設置自己的臨時信息,比如程序啟動之后顯示Ready,一段時間后自動消失——這個功能可以使用QStatusBar的showMessage()函數來實現;一般信息可以用來顯示頁碼之類的;永久信息是不會消失的信息,比如可以在狀態欄提示用戶Caps Lock鍵被按下之類。 QStatusBar繼承自QWidget,因此它可以添加其他的QWidget。下面我們在QStatusBar上添加一個QLabel。 首先在class的聲明中添加一個私有的QLabel屬性: private:?
????????QAction *openAction;?
????????QLabel *msgLabel; 然后在其構造函數中添加: ????????msgLabel =?new?QLabel;?
????????msgLabel->setMinimumSize(msgLabel->sizeHint());?
????????msgLabel->setAlignment(Qt::AlignHCenter);?
?
????????statusBar()->addWidget(msgLabel); 這里,第一行創建一個QLabel的對象,然后設置最小大小為其本身的建議大小——注意,這樣設置之后,這個最小大小可能是變化的——最后設置顯示規則是水平居中(HCenter)。最后一行使用statusBar()函數將這個label添加到狀態欄。編譯運行,將鼠標移動到工具條或者菜單的QAction上,狀態欄就會有相應的提示: 看起來是不是很方便?只是,我們很快發現一個問題:當沒有任何提示時,狀態欄會有一個短短的豎線: 這是什么呢?其實,這是QLabel的邊框。當沒有內容顯示時,QLabel只顯示出自己的一個邊框。但是,很多情況下我們并不希望有這條豎線,于是,我們對statusBar()進行如下設置: statusBar()->setStyleSheet(QString("QStatusBar::item{border: 0px}")); 這里先不去深究這句代碼是什么意思,簡單來說,就是把QStatusBar的子組件的border設置為0,也就是沒有邊框。現在再編譯試試吧!那個短線消失了! QStatusBar右下角的大小控制點可以通過setSizeGripEnabled()函數來設置是否存在,詳情參見API文檔。 好了,現在,我們的狀態欄已經初步完成了。由于QStatusBar可以添加多個QWidget,因此,我們可以構建出很復雜的狀態欄。
????????QAction *openAction;?
????????QLabel *msgLabel; 然后在其構造函數中添加: ????????msgLabel =?new?QLabel;?
????????msgLabel->setMinimumSize(msgLabel->sizeHint());?
????????msgLabel->setAlignment(Qt::AlignHCenter);?
?
????????statusBar()->addWidget(msgLabel); 這里,第一行創建一個QLabel的對象,然后設置最小大小為其本身的建議大小——注意,這樣設置之后,這個最小大小可能是變化的——最后設置顯示規則是水平居中(HCenter)。最后一行使用statusBar()函數將這個label添加到狀態欄。編譯運行,將鼠標移動到工具條或者菜單的QAction上,狀態欄就會有相應的提示: 看起來是不是很方便?只是,我們很快發現一個問題:當沒有任何提示時,狀態欄會有一個短短的豎線: 這是什么呢?其實,這是QLabel的邊框。當沒有內容顯示時,QLabel只顯示出自己的一個邊框。但是,很多情況下我們并不希望有這條豎線,于是,我們對statusBar()進行如下設置: statusBar()->setStyleSheet(QString("QStatusBar::item{border: 0px}")); 這里先不去深究這句代碼是什么意思,簡單來說,就是把QStatusBar的子組件的border設置為0,也就是沒有邊框。現在再編譯試試吧!那個短線消失了! QStatusBar右下角的大小控制點可以通過setSizeGripEnabled()函數來設置是否存在,詳情參見API文檔。 好了,現在,我們的狀態欄已經初步完成了。由于QStatusBar可以添加多個QWidget,因此,我們可以構建出很復雜的狀態欄。
轉載于:https://www.cnblogs.com/lvdongjie/p/4115077.html
總結
- 上一篇: /MD, /MDD, /ML, /MT,
- 下一篇: [翻译] RDVTabBarContro