2012-09-09 28 views
3

可以說我擁有推廣一個小部件所需的一切(我將在本例中使用一個QLineEdit)到一個名爲MyClass的類。 MyClass從QWidget繼承並定義自己的函數。當你在QtCreator中推廣一個小部件時會發生什麼?

當我將QLineEdit提升爲MyClass的實例時,幕後會發生什麼?我知道QLineEdit是QWidget的一個孩子,所以MyClass和QLineEdit在那個因素中相關。但是,物業會發生什麼? QLineEdit是否仍然保留QLineEdit特有的屬性?它如何改變「類型」?

除了QLineEdit仍然保留QWidget的屬性(MyClass繼承自類)的事實之外,我不確定在這個小部件的提升背後發生了什麼。

回答

2

當您從QLineEdit的促進MYCLASS,而是如果有:

QLineEdit *lineedit=new QLineEdit(centralWidget);

您將有:

MyClass * lineedit=new MyClass(centralWidget);

你可以叫從MyClass的你的功能以正常的方式,你可以打開ui.h文件並親自查看。

+0

有趣。 'MyClass'必須有一個QLineEdit的構造函數嗎? – ZERO

+0

是的,您確實需要MyClass的構造函數來接受QWidget作爲參數... –

+0

謝謝,現在有道理。想知道,如果我創建了一個QPushButton,將該按鈕的文本設置爲「按下我」,並將其提升爲「MyClass」,那麼在嘗試在「MyClass」上使用'setText()目的。這是否意味着我無法「定製」我的小部件,然後將小部件提升到我的定製類? – ZERO

2

由於MyClass以公開的方式擴展了QLineEdit,它繼承了所有的屬性並能夠完全替代QLineEdit。 QtCreator只是改變了實現。這正是多元主義「爲之奮鬥」。 Qt Creator對其他方法一無所知,並且不需要,它將MyClass視爲QLineEdit。這是有效的,因爲MyClass 是-a QLineEdit。

+0

感謝您的迴應,但我仍然有一些問題..所以唯一的改變是MyClass繼承了QLineEdit?另外,當我將這個小部件提升到'MyClass'時,創建這個小部件的文件會做這樣的事情? 'QLineEdit lineEdit = new MyClass(ui-> widget)'?這是否意味着MyClass的未來對象將具有QLineEdit成員? – ZERO

相關問題