QT快速學習筆記——在組件之上顯示另一個組件

Parenting system介紹

這是我要介紹的QT程序的第一個重要的概念——Parenting system,原諒我不知道怎麼翻譯=_=。

這個機制的實現由QObject類提供,該類是QT中絕大部分組件的基類。QT中類的關係簡圖如下:

可以看到,我們在上一節中所使用的QPushButton組件也繼承自QObject類,所以該組件也支持Parenting system機制。

代碼演示

接下來我將通過一段代碼來演示Parenting system機制的作用:

#include <QApplication>
#include <QPushButton>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QPushButton *button1 = new QPushButton("Hello World");
    // 實例化button2,在構造函數的第二個參數中填入button1的地址
    // 此時button2就是button1的子組件
    QPushButton *button2 = new QPushButton("Hi", button1);

    // 只需要顯示父組件,其下的子組件就會一同顯示
    // 另外子組件也不需要單獨調用delete(),他會隨着父組件一起被釋放
    button1->show();

    return a.exec();
}

運行後顯示是這樣的:

我們將窗體拉大,變成如下:

解讀

可以看到,button2是顯示在了button1的上面。這就很實際了,因為我們常見的Windows窗體都是在一個組件上疊加其他組件來顯示的,例如:

每一個顏色的框框代表一個組件(沒有把所有組件都標記出來,只摘取部分説明問題)。可以發現這樣一個很複雜的窗體,就是一個面積很大的組件上面無限層次的疊加小組件來最終實現的。

而維護這種組件之間的父子關係的方法就是我們本篇文章所介紹的——Parenting system機制。

但是我們剛剛的程序還存在一個問題,就是父組件button1是一個按鈕,試想一下如果把button1換成一個顯示空白的組件是不是會更好一些?相關內容將在下一篇文章中詳述。

Leave a Reply

Your email address will not be published. Required fields are marked *

Captcha Code