程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> Qt學習之路(14):狀態欄

Qt學習之路(14):狀態欄

編輯:關於C++

今天的內容主要還是繼續完善前面的那個程序。我們要為我們的程序加上一個狀態欄。

狀態欄位於主窗口的最下方,提供一個顯示工具提示等信息的地方。一般地,當窗口不是最大化的時候,狀態欄的右下角會有一個可以調節大小的控制點;當窗口最大化的時候,這個控制點會自動消失。Qt提供了一個QStatusBar類來實現狀態欄。

Qt具有一個相當成熟的GUI框架的實現——這一點感覺比Swing要強一些——Qt似乎對GUI的開發做了很多設計,比如 QMainWindow類裡面就有一個statusBar()函數,用於實現狀態欄的調用。類似menuBar()函數,如果不存在狀態欄,該函數會自動創建一個,如果已經創建則會返回這個狀態欄的指針。如果你要替換掉已經存在的狀態欄,需要使用QMainWindow的setStatusBar()函數。

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

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

首先在class的聲明中添加一個私有的QLabel屬性:

private:
QAction *openAction;
QLabel *msgLabel;

然後在其構造函數中添加:

msgLabel = new QLabel;
msgLabel->setMinimumSize(msgLabel->sizeHint());
msgLabel->setAlignment(Qt::AlignHCenter);
statusBar()->addWidget(msgLabel);

這裡,第一行創建一個QLabel的對象,然後設置最小大小為其本身的建議大小——注意,這樣設置之後,這個最小大小可能是變化的——最後設置顯示規則是水平居中(HCenter)。最後一行使用statusBar()函數將這個label添加到狀態欄。編譯運行,將鼠標移動到工具條或者菜單的 QAction上,狀態欄就會有相應的提示:

看起來是不是很方便?只是,我們很快發現一個問題:當沒有任何提示時,狀態欄會有一個短短的豎線:

這是什麼呢?其實,這是QLabel的邊框。當沒有內容顯示時,QLabel只顯示出自己的一個邊框。但是,很多情況下我們並不希望有這條豎線,於是,我們對statusBar()進行如下設置:

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

這裡先不去深究這句代碼是什麼意思,簡單來說,就是把QStatusBar的子組件的border設置為0,也就是沒有邊框。現在再編譯試試吧!那個短線消失了!

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

好了,現在,我們的狀態欄已經初步完成了。由於QStatusBar可以添加多個QWidget,因此,我們可以構建出很復雜的狀態欄。

出處:http://devbean.blog.51cto.com/448512/210947

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved