我使用 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
WidgetType1
是 widget1
的父级,则 类型的widget1
将绘制在类型 WidgetType2
widget2
内,而不是如果类WidgetType2
包含类型 WidgetType2
的成员。 widget2
可以通过在 widget2
的构造函数中将widget2
作为父级传递或使用 widget2.setParent(widget1);
来设置widget1
的父级。布局还可以定义Parent/child
层次结构。
是的,您可以拥有包含和定义其他对象的对象类型,但是如果您不将this
作为父对象传递给成员对象,则成员对象将不会在容器类类型小部件中绘制。
在您的情况下,不需要有多个类,您只需要将要成为容器的对象设置为您想要成为子级的对象。有关更多信息,我建议您阅读布局管理和对象树和所有权的Qt
文档。