qt 状态栏
有段時(shí)間沒有寫過(guò)博客了。假期去上海旅游,所以一直沒有能夠上網(wǎng)。現(xiàn)在又來(lá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)感覺比Swing要強(qiáng)一些——Qt似乎對(duì)GUI的開發(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è)赒StatusBar上添加一個(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)沒有任何提示時(shí),狀態(tài)欄會(huì)有一個(gè)短短的豎線: 這是什么呢?其實(shí),這是QLabel的邊框。當(dāng)沒有內(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,也就是沒有邊框。現(xiàn)在再編譯試試吧!那個(gè)短線消失了! QStatusBar右下角的大小控制點(diǎn)可以通過(guò)setSizeGripEnabled()函數(shù)來(lái)設(shè)置是否存在,詳情參見API文檔。 好了,現(xiàn)在,我們的狀態(tài)欄已經(jīng)初步完成了。由于QStatusBar可以添加多個(gè)QWidget,因此,我們可以構(gòu)建出很復(fù)雜的狀態(tài)欄。
????????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)沒有任何提示時(shí),狀態(tài)欄會(huì)有一個(gè)短短的豎線: 這是什么呢?其實(shí),這是QLabel的邊框。當(dāng)沒有內(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,也就是沒有邊框。現(xiàn)在再編譯試試吧!那個(gè)短線消失了! QStatusBar右下角的大小控制點(diǎn)可以通過(guò)setSizeGripEnabled()函數(shù)來(lái)設(shè)置是否存在,詳情參見API文檔。 好了,現(xiàn)在,我們的狀態(tài)欄已經(jīng)初步完成了。由于QStatusBar可以添加多個(gè)QWidget,因此,我們可以構(gòu)建出很復(fù)雜的狀態(tài)欄。
轉(zhuǎn)載于:https://www.cnblogs.com/lvdongjie/p/4115077.html
總結(jié)
- 上一篇: /MD, /MDD, /ML, /MT,
- 下一篇: [翻译] RDVTabBarContro