W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵(lì)
有段時(shí)間沒有寫過博客了。假期去上海旅游,所以一直沒有能夠上網(wǎng)?,F(xiàn)在又來到這里,開始新的篇章吧!
今天的內(nèi)容主要還是繼續(xù)完善前面的那個(gè)程序。我們要為我們的程序加上一個(gè)狀態(tài)欄。
狀態(tài)欄位于主窗口的最下方,提供一個(gè)顯示工具提示等信息的地方。一般地,當(dāng)窗口不是最大化的時(shí)候,狀態(tài)欄的右下角會有一個(gè)可以調(diào)節(jié)大小的控制點(diǎn);當(dāng)窗口最大化的時(shí)候,這個(gè)控制點(diǎn)會自動消失。Qt 提供了一個(gè) QStatusBar 類來實(shí)現(xiàn)狀態(tài)欄。
Qt 具有一個(gè)相當(dāng)成熟的 GUI 框架的實(shí)現(xiàn)——這一點(diǎn)感覺比 Swing 要強(qiáng)一些—— Qt 似乎對 GUI 的開發(fā)做了很多設(shè)計(jì),比如 QMainWindow 類里面就有一個(gè) statusBar()函數(shù),用于實(shí)現(xiàn)狀態(tài)欄的調(diào)用。類似menuBar()函數(shù),如果不存在狀態(tài)欄,該函數(shù)會自動創(chuàng)建一個(gè),如果已經(jīng)創(chuàng)建則會返回這個(gè)狀態(tài)欄的指針。如果你要替換掉已經(jīng)存在的狀態(tài)欄,需要使用 QMainWindow 的 setStatusBar()函數(shù)。
在 Qt 里面,狀態(tài)欄顯示的信息有三種類型:臨時(shí)信息、一般信息和永久信息。其中,臨時(shí)信息指臨時(shí)顯示的信息,比如 QAction 的提示等,也可以設(shè)置自己的臨時(shí)信息,比如程序啟動之后顯示 Ready,一段時(shí)間后自動消失——這個(gè)功能可以使用 QStatusBar 的 showMessage()函數(shù)來實(shí)現(xiàn);一般信息可以用來顯示頁碼之類的;永久信息是不會消失的信息,比如可以在狀態(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)移動到工具條或者菜單的QAction上,狀態(tài)欄就會有相應(yīng)的提示:
看起來是不是很方便?只是,我們很快發(fā)現(xiàn)一個(gè)問題:當(dāng)沒有任何提示時(shí),狀態(tài)欄會有一個(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è)置是否存在,詳情參見API 文檔。
好了,現(xiàn)在,我們的狀態(tài)欄已經(jīng)初步完成了。由于 QStatusBar 可以添加多個(gè) QWidget,因此,我們可以構(gòu)建出很復(fù)雜的狀態(tài)欄。
本文出自 “豆子空間” 博客,請務(wù)必保留此出處 http://devbean.blog.51cto.com/448512/194031
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: