QT:私人会员而不是继承?原因是什么?这是一个具体的概念吗?
QT: Private member instead of inheritance? What is the reason? Is this a specific concept?
前段时间我用QT Designer/QT Creator编写了一个GUI。 对于这个问题,我将首先说明使用上述IDE创建GUI的一般过程如何工作的示意图:
- 使用 QT 设计器创建设计 -> 获取 .ui 文件 .
- ui文件被翻译成头文件,你特别会得到类似"UIbasisclass.h"(带有类
UIbasisclass
)。 - 你自己创建一个类似"UIsubclass.h"(带有类
UIsubclass
)的东西,使一个私有成员UIbasisclass ui
。
类UIsubclass
中的代码:
...
private:
Ui::UIbasisclass ui;
...
最后,您将在 main 方法 -> Code 中创建一个UIsubclass
的对象:
...
UIsubclass *MyGUI = new UIsubclass();
...
其中 UIsubclass 的构造函数包含以下其他代码:
...
ui.setupUi(this);
...
简而言之:我们有一个主要负责应用程序方法的UIsubclass
,但也有一个名为ui
的UIbasisclass
私有成员,主要由设计代码组成。 当我们创建一个对象时UIsubclass
它的私有成员UIbasisclass ui
在UIsubclass
的构造函数中初始化,对象是UIsubclass
本身(?)。[请参阅:此指针]
我现在的问题是:
为什么没有像
UIsubclass
从UIbasisclass
继承那样使用继承?相反,UIbasisclass
的一个对象成为UIsubclass
的成员。这是某个特定的有利概念(如果是,它有什么优势或如何命名?)还是"只是"QT代码结构的必要条件?
如果我必须指定我的问题或是否有任何问题,请告诉我。
你可以使用私有继承,它甚至记录在Qt文档中。
使用私有成员进行UI是默认的,因为Qt Creator使用的模板,Qt本身并不关心。
为什么没有像
UIsubclass
从UIbasisclass
继承那样使用继承?
你问我们为什么你没有在自己的代码中这样做?只管去做。这取决于你。这确实是你的代码。您对其设计负责。如果您使用的是模板,它可以帮助您入门,而不是为您设计软件。责任是你的,而且只属于你。
它"只是"QT代码结构的必要性?
没有这种必要性。Ui
类是一个带有一堆指针和一个方法的 POD 类。没什么大不了的。如果你想私下继承它:继续。
因为使用私有成员可以转发声明生成的类:
namespace Ui {
class MyForm;
}
class Foo {
private:
Ui::MyForm *ui;
};
并在.cpp文件上插入包含。
这样,此文件的所有可能包含都不必再次预处理该文件。
- 将变量从主窗口传递到另一个qt c++窗体
- 尝试使用 CPP 在一个 Qt 窗口中显示多个 png 文件
- 我有一个 Qt 对象的 2d 数组,我已经用值播种了这些对象。如何访问数组中特定对象的值并更改它们?
- 如何从另一个Qt Widget表单类调用MainWindow类
- 如何将变量从一个 qt 表单传递到另一个表单 qt 形式
- 在QIODevice::Append模式下打开的QFile意外工作.这是一个Qt错误吗
- 如何执行从另一个Qt程序分离的C++可执行文件
- 编译一个Qt项目并包含Qt库
- 我在Visual Studio中运行了一个Qt C++项目,但缺少"the program can not start because QtCored4.dll"
- 试图编译一个qt项目,在不同的地方得到输入/输出错误
- 编译一个Qt单文件从命令行:未定义的引用到虚表
- 如何传递一个QT对象作为参数
- 我的第一个Qt应用,c++(小opencv)
- 我如何让我的Qt控制台应用程序与另一个Qt gui应用程序通信
- 在另一个QT项目中包含一个QT库
- QT 将信号发送到另一个 QT 应用程序
- 我如何写一个Qt正则表达式来突出显示字符串开始和结束与非单词字符
- 创建一个Qt小部件属于另一个小部件由Qt设计器
- 如何完全/正确地退出一个Qt程序从主要形式
- Eclipse CDT/Qt:有一个Qt Gui项目依赖于工作空间中的另一个c++项目