Qt 狀態(tài)欄

2018-10-05 14:46 更新

狀態(tài)欄

有段時間沒有寫過博客了。假期去上海旅游,所以一直沒有能夠上網(wǎng)?,F(xiàn)在又來到這里,開始新的篇章吧!

今天的內(nèi)容主要還是繼續(xù)完善前面的那個程序。我們要為我們的程序加上一個狀態(tài)欄。

狀態(tài)欄位于主窗口的最下方,提供一個顯示工具提示等信息的地方。一般地,當(dāng)窗口不是最大化的時候,狀態(tài)欄的右下角會有一個可以調(diào)節(jié)大小的控制點;當(dāng)窗口最大化的時候,這個控制點會自動消失。Qt 提供了一個 QStatusBar 類來實現(xiàn)狀態(tài)欄。

Qt 具有一個相當(dāng)成熟的 GUI 框架的實現(xiàn)——這一點感覺比 Swing 要強一些—— Qt 似乎對 GUI 的開發(fā)做了很多設(shè)計,比如 QMainWindow 類里面就有一個 statusBar()函數(shù),用于實現(xiàn)狀態(tài)欄的調(diào)用。類似menuBar()函數(shù),如果不存在狀態(tài)欄,該函數(shù)會自動創(chuàng)建一個,如果已經(jīng)創(chuàng)建則會返回這個狀態(tài)欄的指針。如果你要替換掉已經(jīng)存在的狀態(tài)欄,需要使用 QMainWindow 的 setStatusBar()函數(shù)。

在 Qt 里面,狀態(tài)欄顯示的信息有三種類型:臨時信息、一般信息和永久信息。其中,臨時信息指臨時顯示的信息,比如 QAction 的提示等,也可以設(shè)置自己的臨時信息,比如程序啟動之后顯示 Ready,一段時間后自動消失——這個功能可以使用 QStatusBar 的 showMessage()函數(shù)來實現(xiàn);一般信息可以用來顯示頁碼之類的;永久信息是不會消失的信息,比如可以在狀態(tài)欄提示用戶 Caps Lock 鍵被按下之類。

QStatusBar 繼承自 QWidget,因此它可以添加其他的 QWidget。下面我們在 QStatusBar 上添加一個 QLabel。

首先在 class 的聲明中添加一個私有的 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)建一個 QLabel 的對象,然后設(shè)置最小大小為其本身的建議大小——注意,這樣設(shè)置之后,這個最小大小可能是變化的——最后設(shè)置顯示規(guī)則是水平居中(HCenter)。最后一行使用 statusBar()函數(shù)將這個 label 添加到狀態(tài)欄。編譯運行,將鼠標(biāo)移動到工具條或者菜單的QAction上,狀態(tài)欄就會有相應(yīng)的提示:

看起來是不是很方便?只是,我們很快發(fā)現(xiàn)一個問題:當(dāng)沒有任何提示時,狀態(tài)欄會有一個短短的豎線:

這是什么呢?其實,這是 QLabel 的邊框。當(dāng)沒有內(nèi)容顯示時,QLabel 只顯示出自己的一個邊框。但是,很多情況下我們并不希望有這條豎線,于是,我們對 statusBar()進(jìn)行如下設(shè)置:

statusBar()->setStyleSheet(QString("QStatusBar::item{border: 0px}"));

這里先不去深究這句代碼是什么意思,簡單來說,就是把 QStatusBar 的子組件的 border 設(shè)置為0,也就是沒有邊框?,F(xiàn)在再編譯試試吧!那個短線消失了!

QStatusBar 右下角的大小控制點可以通過 setSizeGripEnabled()函數(shù)來設(shè)置是否存在,詳情參見API 文檔。

好了,現(xiàn)在,我們的狀態(tài)欄已經(jīng)初步完成了。由于 QStatusBar 可以添加多個 QWidget,因此,我們可以構(gòu)建出很復(fù)雜的狀態(tài)欄。

本文出自 “豆子空間” 博客,請務(wù)必保留此出處 http://devbean.blog.51cto.com/448512/194031

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號