Qt 狀態(tài)欄

2018-10-05 14:46 更新

狀態(tài)欄

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

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

狀態(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 類來(lái)實(shí)現(xiàn)狀態(tài)欄。

Qt 具有一個(gè)相當(dāng)成熟的 GUI 框架的實(shí)現(xiàn)——這一點(diǎn)感覺(jué)比 Swing 要強(qiáng)一些—— Qt 似乎對(duì) GUI 的開(kāi)發(fā)做了很多設(shè)計(jì),比如 QMainWindow 類里面就有一個(gè) statusBar()函數(shù),用于實(shí)現(xiàn)狀態(tài)欄的調(diào)用。類似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ù)來(lái)實(shí)現(xiàn);一般信息可以用來(lái)顯示頁(yè)碼之類的;永久信息是不會(huì)消失的信息,比如可以在狀態(tài)欄提示用戶 Caps Lock 鍵被按下之類。

QStatusBar 繼承自 QWidget,因此它可以添加其他的 QWidget。下面我們?cè)?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 的對(duì)象,然后設(shè)置最小大小為其本身的建議大小——注意,這樣設(shè)置之后,這個(gè)最小大小可能是變化的——最后設(shè)置顯示規(guī)則是水平居中(HCenter)。最后一行使用 statusBar()函數(shù)將這個(gè) label 添加到狀態(tài)欄。編譯運(yùn)行,將鼠標(biāo)移動(dòng)到工具條或者菜單的QAction上,狀態(tài)欄就會(huì)有相應(yīng)的提示:

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

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

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

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

QStatusBar 右下角的大小控制點(diǎn)可以通過(guò) setSizeGripEnabled()函數(shù)來(lái)設(shè)置是否存在,詳情參見(jiàn)API 文檔。

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

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

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)