狀態(tài)欄是位于主窗口的最下方,,提供一個(gè)顯示工具提示等信息的地方,。一般地,當(dāng)窗口不是最大化的時(shí)候,,狀態(tài)欄的右下角會(huì)有一個(gè)可以調(diào)節(jié)大小的控制點(diǎn),;當(dāng)窗口最大化的時(shí)候,這個(gè)控制點(diǎn)會(huì)自動(dòng)消失,。Qt提供了一個(gè)QStatusBar類來實(shí)現(xiàn)狀態(tài)欄,。 QMainWindow類里面就有一個(gè)statusBar()函數(shù),用于實(shí)現(xiàn)狀態(tài)欄的調(diào)用,。statusBar()函數(shù)類似于menuBar()函數(shù),,如果不存在狀態(tài)欄,該函數(shù)會(huì)自動(dòng)創(chuàng)建一個(gè),,如果已經(jīng)創(chuàng)建則會(huì)返回這個(gè)狀態(tài)欄的指針,。如果要替換掉已經(jīng)存在的狀態(tài)欄,需要使用QMainWindow的setStatusBar()函數(shù),。 在Qt里面,,狀態(tài)欄顯示的信息有三種類型:臨時(shí)信息、一般信息和永久信息,。其中,,臨時(shí)信息指臨時(shí)顯示的信息,比如QAction的提示等,也可以設(shè)置自己的臨時(shí)信息,,比如程序啟動(dòng)之后顯示Ready,一段時(shí)間后自動(dòng)消失——這個(gè)功能可以使用QStatusBar的showMessage()函數(shù)來實(shí)現(xiàn),;一般信息可以用來顯示頁碼之類的,;永久信息是不會(huì)消失的信息,比如可以在狀態(tài)欄提示用戶Caps Lock鍵被按下之類,。
QStatusBar繼承自QWidget,,因此它可以添加其他的QWidget。下面我們在QStatusBar上添加一個(gè)QLabel:
首先在class的聲明中添加一個(gè)私有的QLabel屬性:
private:
QAction *openAction; QLabel *msgLabel; 然后在其構(gòu)造函數(shù)中添加:
msgLabel = new QLabel;
msgLabel->setMinimumSize(msgLabel->sizeHint()); msgLabel->setAlignment(Qt::AlignHCenter); statusBar()->addWidget(msgLabel); 第一行創(chuàng)建一個(gè)QLabel的對象,,然后設(shè)置最小大小為其本身的建議大小——注意,,這樣設(shè)置之后,這個(gè)最小大小可能是變化的——最后設(shè)置顯示規(guī)則是水平居中(HCenter),。
最后一行使用statusBar()函數(shù)將這個(gè)label添加到狀態(tài)欄,。編譯運(yùn)行,將鼠標(biāo)移動(dòng)到工具條或者菜單的QAction上,,狀態(tài)欄就會(huì)有相應(yīng)的提示:
我們發(fā)現(xiàn)一個(gè)現(xiàn)象:當(dāng)沒有任何提示時(shí),,狀態(tài)欄會(huì)有一個(gè)短短的豎線:
這是什么呢?
其實(shí),,這是QLabel的邊框,。當(dāng)沒有內(nèi)容顯示時(shí),QLabel只顯示出自己的一個(gè)邊框,。但是,,很多情況下我們并不希望有這條豎線,于是,,我們對statusBar()進(jìn)行如下設(shè)置:
statusBar()->setStyleSheet(QString("QStatusBar::item{border: 0px}"));
簡單來說,,就是把QStatusBar的子組件的border設(shè)置為0,也就是沒有邊框?,F(xiàn)在再編譯試試吧,!那個(gè)短線消失了!
QStatusBar右下角的大小控制點(diǎn)可以通過setSizeGripEnabled()函數(shù)來設(shè)置是否存在
statusBar()->setSizeGripEnabled(false);可以隱藏大小控制點(diǎn)
下面是Qt Assistant中的函數(shù)屬性介紹:
sizeGripEnabled : boolThis property holds whether the QSizeGrip in the bottom-right corner of the status bar is enabled. The size grip is enabled by default. 現(xiàn)在,,我們的狀態(tài)欄已經(jīng)初步完成了,。由于QStatusBar可以添加多個(gè)QWidget,因此,,我們可以構(gòu)建出很復(fù)雜的狀態(tài)欄,。 |
|