Qt设计器:嵌套小部件不是成员

Qt designer: nested widget is not a member?

本文关键字:成员 小部 嵌套 Qt      更新时间:2023-10-16

我使用 Qt Creator 3.2.1。使用Qt设计器,我做了基本设计:我通过添加一个普通的QWidget并将其提升到我的自定义窗口,在我的主窗口中添加一个自定义小部件(CustomWidget小部件)。在该自定义小部件中,我添加了一个QGraphicsView(QGraphicsView视图)。

Qt Designer的对象浏览器正确显示项目的层次结构:部件内的视图主窗口中的小部件

但是,表单生成的 ui_mainwindow.h 给了我:

// in ui_mainwindow.h
class Ui_MainWindow
{
public:
    CustomWidget *widget;
    QGraphicsView *view;
    // ...
};

当我真正期望时:

// in ui_mainwindow.h
class Ui_MainWindow
{
public:
    CustomWidget *widget;
    // ...
};
// in customwidget.h
class CustomWidget
{
public:
    QGraphicsView *view;
    // ...
};
另一个小部件

的嵌套小部件不应该是它的成员吗?

如何在Qt设计器中调整我的类设计以使小部件视图成为成员?

Qt中,用于定义小部件层次结构的规则不是包含,而是父级。 如果 widget2 WidgetType1widget1 的父级,则 类型的widget1将绘制在类型 WidgetType2 widget2 内,而不是如果类WidgetType2包含类型 WidgetType2 的成员。 widget2可以通过在 widget2 的构造函数中将widget2作为父级传递或使用 widget2.setParent(widget1); 来设置widget1的父级。布局还可以定义Parent/child层次结构。

是的,您可以拥有包含和定义其他对象的对象类型,但是如果您不将this作为父对象传递给成员对象,则成员对象将不会在容器类类型小部件中绘制。

在您的情况下,不需要有多个类,您只需要将要成为容器的对象设置为您想要成为子级的对象。有关更多信息,我建议您阅读布局管理和对象树和所有权的Qt文档。