在表单中使用接口 class,以便使用派生的 class 所需

Using Interface class in form, in order to use the derived class desired

我想在同一区域使用不同的自定义小部件(视情况而定)。为此,我创建了一个接口 class 和一些派生的自定义 classes 小部件(因为它们具有相同的方法和清洁度)。

我的界面是:

IDial

派生 类 :

FirstDial, SecondDial

这些派生的classes继承自IDial,因此它们具有与IDial相同的功能。

当我开始我的程序时,我想选择我要显示的表盘,这取决于宏或参数(这不重要)。

为了能够显示我想要的派生class(小部件),我别无选择,只能将接口class名称(IDial)设置为"objectName"我的窗体小部件区域(设计模式)。

问题是Qt正在尝试实例化这个接口...(因为纯虚函数,这是不可能的,也是正常的)。

我想指出的是,该区域可以包含不同的小部件,这些小部件都继承自此接口。

不用class IDial,把QFrame加到你想要的地方。在你的头文件中:

#include "firstdial.h"
#include <QHBoxLayout>
...
QHBoxLayout* layout;
FirstDial* firstDial;

在源文件中为您的 class 创建新的布局和对象:

ui->frame->setFrameShape(QFrame::NoFrame); // a frame you've created
layout = new QHBoxLayout(ui->frame);
firstDial = new FirstDial;

将您的小部件添加到布局:

layout->addWidget(firstDial);