前段时间我用QT Designer / QT Creator编写了一个GUI。 对于这个问题,我将首先说明如何使用上述IDE创建GUI的一般过程的原理图:
UIbasisclass
)。UIsubclass
)的内容,自己创建一个私有成员UIbasisclass ui
。班级UIsubclass
内的代码:
...
private:
Ui::UIbasisclass ui;
...
最后,您将在main方法中创建UIsubclass
的对象 - >代码:
...
UIsubclass *MyGUI = new UIsubclass();
...
其中UIsubclass的构造函数包含以下代码:
...
ui.setupUi(this);
...
简而言之:我们有一个UIsubclass
主要负责应用方法,但也有UIbasisclass
的私有成员,名为ui
,主要由设计代码组成。
当我们创建UIsubclass
的对象时,其私有成员UIbasisclass ui
在UIsubclass
的构造函数中初始化,其对象为UIsubclass
本身(?)。 [见:这个指针]
我现在的问题是:
为什么UIsubclass
继承UIbasisclass
的方式没有使用继承?相反,UIbasisclass
的一个对象成为UIsubclass
的成员。
这是一个特定的有利概念(如果是,它有哪些优点或如何命名?)或“仅仅”是QT代码结构的必要性?
如果我必须指出我的问题或是否有任何问题,请告诉我。
答案 0 :(得分:2)
您可以使用私有继承,甚至可以在Qt documentation中记录。
由于Qt Creator使用了模板,因此默认使用ui的私有成员,Qt本身并不关心。
答案 1 :(得分:1)
为什么
UIsubclass
继承UIbasisclass
的方式没有使用继承?
您问我们为什么您没有在自己的代码中执行此操作?去做就对了。它取决于你。它确实是您的代码。 您负责其设计。如果您正在使用模板,那么它可以帮助您入门,但不会为您设计软件。责任在于你,而你的责任只有你自己。
它"只是" QT代码结构的必要性?
没有这种必要性。 Ui
类是一个POD类,带有一堆指针和一个方法。没什么好看的。如果你想私下继承它:马上就行。
答案 2 :(得分:1)
因为使用私有成员,您可以转发声明生成的类:
namespace Ui {
class MyForm;
}
class Foo {
private:
Ui::MyForm *ui;
};
并在.cpp文件中插入include。
这样,此文件的所有可能包含都不必再次预处理该文件。