鍍金池/ 教程/ C/ 狀態(tài)欄
Qt 容器和算法拾遺
自定義 model 之一
反走樣
Hello, world!
Qt 容器類(lèi)之關(guān)聯(lián)存儲(chǔ)容器
QStringListModel
拖放技術(shù)之一
狀態(tài)欄
QTreeWidget
拖放技術(shù)之二
通用算法
event()
Qt 學(xué)習(xí)之路(18): Qt 標(biāo)準(zhǔn)對(duì)話框之 QInputDialog
Qt 容器類(lèi)之遍歷器和隱式數(shù)據(jù)共享
QListWidget
Meta-Object 系統(tǒng)
事件接收與忽略
Qt 學(xué)習(xí)之路(tip): parent 參數(shù)
Qt 標(biāo)準(zhǔn)對(duì)話框之 QColorDialog
QPainter(續(xù))
國(guó)際化(下)
漸變填充
自定義委托
創(chuàng)建 shared library
model-view 架構(gòu)
Graphics View Framework
自定義拖放數(shù)據(jù)對(duì)象
QSortFilterProxyModel
國(guó)際化(上)
組件布局
自定義 Model 之三
事件過(guò)濾器
QDirModel
Hello, world!(續(xù))
Qt 標(biāo)準(zhǔn)對(duì)話框之 QFileDialog
自定義 model 之二
深入了解信號(hào)槽
坐標(biāo)變換
剪貼板操作
QTableWidget
QByteArray 和 QVariant
創(chuàng)建一個(gè)對(duì)話框(下)
Qt 學(xué)習(xí)之路(32): 一個(gè)簡(jiǎn)易畫(huà)板的實(shí)現(xiàn)(Graphics View)
文本文件讀寫(xiě)
自定義事件
編寫(xiě)跨平臺(tái)的程序
MainWindow
初探信號(hào)槽
Qt 學(xué)習(xí)之路(17): Qt 標(biāo)準(zhǔn)對(duì)話框之 QMessageBox
繪圖設(shè)備
菜單和工具條(續(xù))
二進(jìn)制文件讀寫(xiě)
QString
事件(event)
菜單和工具條
QPainter
Qt 容器類(lèi)之順序存儲(chǔ)容器
進(jìn)程間交互
API 文檔的使用
創(chuàng)建一個(gè)對(duì)話框(上)
一個(gè)簡(jiǎn)易畫(huà)板的實(shí)現(xiàn)(QWidget)

狀態(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)來(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 類(lèi)里面就有一個(gè) statusBar()函數(shù),用于實(shí)現(xiàn)狀態(tài)欄的調(diào)用。類(lèi)似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)欄顯示的信息有三種類(lè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è)碼之類(lèi)的;永久信息是不會(huì)消失的信息,比如可以在狀態(tài)欄提示用戶 Caps Lock 鍵被按下之類(lèi)。

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)的提示:

http://wiki.jikexueyuan.com/project/learn-road-qt/images/24.png" alt="" />

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

http://wiki.jikexueyuan.com/project/learn-road-qt/images/25.png" alt="" />

這是什么呢?其實(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)有邊框。現(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