c++ - Qt 扩展我自己的小部件

标签 c++ qt widget extends extending

简而言之,我想要一个新类来扩展我制作的自定义小部件,从而可以完全访问它的 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/

相关文章:

java - 复选框导致小部件出错

c++ - 扩展两个类的参数的语法

c++ - 如何获取PRO文件中的目标目录

java - 想要在 Qt 和 Java 之间进行选择 : a newb question

javascript - 如何从 QML 连接 C++ 对象的销毁信号?

c++ - Qt 线程计算输出到 GUI 中的自己的小部件?

python-3.x - 如何使用控制小部件将子图添加到绘图中

C++ 我可以重用 fstream 来打开和写入多个文件吗?

c++ - 模板处理程序方法

c++ - 套接字发送错误