2.2 QWidget

本節小豆君就來講述我們最重要的窗口類QWidget,QWidget是所有GUI控件的基類,所以掌握QWidget的用法是學習Qt的重中之重。

在進入正題之前,小豆君先講一下我自己閱讀Qt類的方法,現在就拿QWidget這個類來講解。

2.2.1 閱讀QWidget方法

在幫助文檔中搜索QWidget,打開QWidget幫助文檔。

  1. 閱讀詳細描述(Detailed Description):這部分內容告訴了我們QWidget是做什麼的,QWidget都有哪些屬性和方法,我們應如何使用這個類以及和這個類相關的其它類。
  2. 閱讀類屬性(Properties):一個事物之所以被抽象為某個類,是因為它擁有特定的屬性,或者說它擁有什麼樣的屬性就決定了它是什麼,從而它就具有了什麼樣的功能,所以在看一個類時就需要看它的根本,而根本就是屬性,同時,看屬性的數據類型也是幫助理解屬性的好方法。
  3. 鼠標點擊某個屬性,查看屬性對應的接口,也許有的屬性不太理解,但是通過介紹和對應接口會幫助理解。


2.2.2 QWidget屬性

新建窗口項目WidgetProperty,類名同為WidgetProperty,選擇基類QWidget。

2.2.2.1 QWidget的幾何屬性

2.2 QWidget


  • frameGeometry,frameSize,x,y,pos:框架的幾何區域和大小,框架指窗口的最外層。
  • geometry,width,height,size,rect:內部繪圖區域的幾何框架。

在WidgetProperty的構造函數中添加代碼:

<code>WidgetProperty::WidgetProperty(QWidget *

parent

) :    QWidget(

parent

),    ui(

new

Ui::WidgetProperty) {    ui->setupUi(this);    setGeometry(

0

,

0

,

400

,

300

); }/<code>

運行代碼,窗口的繪圖區域左上角和屏幕的左上角剛好吻合,而標題欄都跑到了屏幕外面。

2.2.2.2 窗口標識

windowFlags屬性。

我們還可以通過調用setWindowFlags(Qt::WindowFlags)來設置窗口類型和窗口標識。

在WidgetProperty構造函數後面繼續添加代碼

<code>

move

(

100

,

100

);

setWindowFlags

(

Qt

::CustomizeWindowHint              |

Qt

::WindowStaysOnTopHint);/<code>

運行程序,我們看到窗口的標題欄已經被隱藏掉了,並且當你點擊其他外部窗口時,本窗口仍然在最屏幕最上面。

在WidgetProperty中的構造函數中,你可以調用此函數,通過傳入不同的值來查看在不同窗口標識下窗口是如何表現的,這些值都可以在幫助文檔中找到。

如果想省點事,可以在Qt的示例程序中查找關鍵字“window flags example”,編譯並運行程序,看每個窗口標識的作用。

下面我總結了在實際項目中可能經常用到的標識

常用窗口類型:

Qt::Widget 默認窗口
Qt::Dialog 對話框
Qt::SplashScreen 啟動窗口

常用窗口標識:

Qt::SplashScreen 在還沒有展示出主界面前的啟動畫面
Qt::FramelessWindowHint 隱藏標題欄,並且去掉窗口的邊框,窗口不能移動和縮放。
Qt::CustomizeWindowHint 隱藏標題欄,不會去掉窗口的邊框,窗口不能移動,但可以縮放。
Qt::WindowStaysOnTopHint 使窗口始終處於最頂部。類似於播放器中的總在最前功能。

2.2.2.3 其他屬性

  • acceptDrops:接受放下事件。
  • autoFillBackground:如果將這個屬性設置為true,Qt將在調用paintEvent之前填充背景。可以使用調色板來進行填充。
  • enabled:窗口是否可用,如果被設置為false,則不會接收用戶操作,同時其子控件也不接收用戶操作。
  • focus:是否獲得焦點。
  • modal:是否為模態窗口,關於模態窗口,我會在QDialog中講解。
  • mouseTracking:是否跟蹤鼠標,默認為不跟蹤。默認情況時,當鼠標按下後才會跟蹤鼠標移動,如果被設置為true,在鼠標不按下時,也跟蹤鼠標移動。
  • palette:調色板。
  • toolTip:鼠標懸停時的提示信息。
  • toolTipDuration:鼠標懸停時顯示提示信息持續時間。
  • visible:是否可見。
  • windowOpacity:窗口透明度0-1。
  • windowTitle:窗口標題。

2.2.3 函數調用舉例

下面我們來看個例子,構造函數中換成如下代碼

<code>WidgetProperty::WidgetProperty(QWidget *

parent

) :    QWidget(

parent

),    ui(

new

Ui::WidgetProperty) {    ui->setupUi(this);        setAutoFillBackground(

true

);    QPalette pa = this->palette();    pa.setBrush(QPalette::Background,                QBrush(Qt::green));    setPalette(pa);        setWindowOpacity(

0.9

);        setWindowTitle(

"窗口屬性"

);        setToolTip(

"懸停"

);        resize(

600

,

400

);        move(

0

,

0

); }/<code>

運行程序

2.2 QWidget


好了,今天就到這裡,我們下期再見。


分享到:


相關文章: