在表单中使用Interface类,以便使用所需的派生类

时间:2016-11-28 20:54:01

标签: c++ qt qt-creator

我想在同一区域使用不同的自定义小部件(取决于具体情况)。为此,我创建了一个Interface类和一些派生自定义类小部件(因为它们具有相同的方法和清洁度)。

我的界面是:

  

IDial

派生类:

  

FirstDial,SecondDial

这些派生类继承自IDial,因此它们具有IDial的常用功能。

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

为了能够显示我想要的派生类(小部件),我没有其他选择,只能将接口类名称(IDial)作为" objectName"我的小部件区域的形式(设计模式)。

问题是Qt试图实例化这个接口......(由于纯虚函数,它是不可能和正常的。)

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

1 个答案:

答案 0 :(得分:0)

将QFrame添加到您想要的位置,而不是类IDial。在您的标头文件中:

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

在源文件中创建类的新布局和对象:

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

将小部件添加到布局:

layout->addWidget(firstDial);