Qt设计师:嵌套小部件不是会员?

时间:2014-11-23 13:55:26

标签: c++ qt widget

我正在使用Qt Creator 3.2.1。 使用Qt Designer我做了基本设计:我通过添加一个普通的QWidget并将其提升到我的自定义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 Designer中调整我的类设计以使 view 成员 widget

1 个答案:

答案 0 :(得分:0)

Qt中,用于定义窗口小部件层次结构的规则不是包含,而是包含父级。如果widget1WidgetType1的父级,则widget2类型WidgetType2内的widget2将被widget1抽取,而不是类WidgetType2的{​​{1}} 1}}包含WidgetType2类型的成员。 widget2可以设置为widget1的父级,方法是将widget2作为widget2的构造函数中的父级或使用widget2.setParent(widget1);。布局也可以定义Parent/child层次结构。

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

在你的情况下,不需要有多个类,你只需要将你想成为容器的对象父对象设置为你想成为子对象的对象。有关详情,建议您阅读Layout ManagementObject Trees & OwnershipQt文档。