Qt扩展我自己的小部件

时间:2014-10-17 20:43:57

标签: c++ qt widget extends extending

简而言之,我想要一个新类,它扩展了我自己制作的自定义小部件,因此可以完全访问它的UI。

到目前为止,我已经尝试了几种不同的方法,这些方法基于人们通常如何对类进行子类化/扩展,但是由于种种原因,我有点失败。

此外,在我的新课程中简单地使用我的小部件作为成员不会为这种情况做。

有人可以举例说明我将如何做到这一点吗?我已经做了很多搜索,但我似乎无法找到任何与我正在尝试做的事情有关的点击 如果所有其他方法都失败了,我只需复制代码并制作一个实际的新小部件,这在技术上可以为我节省很多时间,但它确实没有那么做。

我的第一直觉是做这样的事情(Qwe是我的新班级,Asd是小工具:

class Qwe : Asd {public: ...}

我甚至公开了小部件的Ui,但后来我得到了错误:

  

使用undefine类型Ui :: Asd

每当我尝试访问Ui的元素时。

1 个答案:

答案 0 :(得分:2)

假设我们有一个名为BaseWidget的自定义窗口小部件和一个名为ChildWidget的子窗口小部件。通常声明BaseWidget,但要使其ui成员受保护而不是私有,如下所示:

protected:
  Ui::BaseWidget *ui;

ChildWidget声明为源自BaseWidget的普通窗口小部件。确保在ui_BaseWidget.h文件中包含ChildWidget.cpp,就像在BaseWidget.cpp中一样(这包括并且标题本身由Qt生成)。

部首:

#include "BaseWidget.h"

class ChildWidget : public BaseWidget {
  Q_OBJECT
public:
  explicit ChildWidget(QString text, QWidget *parent = 0);    
};

来源:

#include "ChildWidget.h"
#include "ui_BaseWidget.h"

ChildWidget::ChildWidget(QString text, QWidget *parent) :
  BaseWidget(parent)
{
  ui->label->setText(text);
}