2014-10-17 76 views
0

简而言之,我想要一个新的类来扩展自己创建的自定义小部件,从而可以完全访问它的UI。Qt扩展我自己的小部件

到目前为止,我已经尝试了几种不同的方法,基于通常如何继承子类/扩展类,但我在某种程度上由于许多不同的原因失败了。

此外,只是使用我的小部件作为我的新班级的成员不会为这种情况。

有人可以举例说明我将如何做到这一点吗?我做了一堆搜索,但我似乎无法找到任何与我正在尝试做什么有关的命中 如果一切都失败了,我会简单地复制代码并制作一个实际的新小部件,这在技术上会有为我节省了很多时间,但这样做感觉不对。

我的第一反应是想这样做(Qwe是我的新类,Asd是小部件):

class Qwe : Asd {public: ...} 

而且我还送了小部件的UI公开,但后来我得到了错误:

使用取消定义类型的UI ::性Asd

每当我试图访问用户界面的元素。

回答

2

比方说,我们有一个名为BaseWidget的定制小部件和一个名为ChildWidget的子小部件。声明BaseWidget作为一般,但使其ui部件保护的,而不是私人的,就像这样:

protected: 
    Ui::BaseWidget *ui; 

声明ChildWidgetBaseWidget得出一个普通的小部件。确保你在ChildWidget.cpp文件中包含ui_BaseWidget.h,就像你在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); 
} 
+0

谢谢,这解决了我的问题 – Yattabyte 2014-10-17 22:24:04