简而言之,我想要一个新类来扩展我制作的自定义小部件,从而可以完全访问它的 UI。
到目前为止,我已经根据人们通常如何子类化/扩展类的方式尝试了几种不同的方法,但由于许多不同的原因,我以某种方式失败了。
此外,在这种情况下,仅将我的小部件用作我的新类中的成员是行不通的。
有人可以举例说明我将如何做到这一点吗?我进行了大量搜索,但似乎找不到与我正在尝试做的事情相关的任何匹配项 如果一切都失败了,我将简单地复制代码并制作一个实际的新小部件,从技术上讲这会节省我很多时间,但这样做感觉不对。
我的第一直觉是做这样的事情(Qwe
是我的新类,Asd
是小部件):
class Qwe : Asd {public: ...}
我什至公开了小部件的 Ui,但随后我得到了错误:
use of undefine type Ui::Asd
每当我尝试访问 Ui 的元素时。
最佳答案
假设我们有一个名为 BaseWidget
的自定义小部件和一个名为 ChildWidget
的子小部件。像往常一样声明 BaseWidget
,但使其 ui
成员 protected 而不是私有(private),如下所示:
protected:
Ui::BaseWidget *ui;
将 ChildWidget
声明为派生自 BaseWidget
的普通小部件。确保将 ui_BaseWidget.h
包含在 ChildWidget.cpp
文件中,就像在 BaseWidget.cpp
中一样(这包含和 header 本身由 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);
}
关于c++ - Qt 扩展我自己的小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26433182/