Qt 设计师:嵌套的小部件不是成员吗?
Posted
技术标签:
【中文标题】Qt 设计师:嵌套的小部件不是成员吗?【英文标题】:Qt designer: nested widget is not a member? 【发布时间】:2014-11-23 13:55:25 【问题描述】:我正在使用 Qt Creator 3.2.1。 我使用 Qt Designer 进行了基本设计:通过添加一个普通的 QWidget 并将其提升到我的自定义窗口中,我向我的 主窗口 添加了一个自定义小部件 (CustomWidget 小部件)。 在那个自定义小部件中,我添加了一个 QGraphicsView(QGraphicsView 视图)。
Qt Designer的对象浏览器正确显示项目的层次结构:widget中的view和mainwindow中的widget em>。
但是,表单生成的 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】:在Qt
中,用于定义小部件层次结构的规则不是包含而是父级。如果widget2
是widget1
的父级,则WidgetType1
类型的WidgetType1
将被绘制在widget2
中,如果WidgetType2
包含WidgetType2
类型的成员则不会。 widget2
可以通过在widget2
的构造函数中传递widget2
作为父级或使用widget2.setParent(widget1);
来设置widget1
的父级。布局也可以定义Parent/child
层次结构。
是的,您可以拥有包含和定义其他对象的对象类型,但是如果您不将this
作为父对象传递给成员对象,则成员对象将不会被绘制在容器类类型小部件中。
在你的情况下,不需要有多个类,你只需要将你想成为容器的对象作为你想成为孩子的对象的父对象。有关更多信息,我建议阅读Layout Management 和Object Trees & Ownership 的Qt
文档。
【讨论】:
感谢您的回答。小部件绘图没有问题。问题是 Qt Designer 不包含嵌套小部件到父小部件中,这在我看来是有意义的。您想创建多个 CustomWidget 实例的映像。将 QGraphicsView *view 包含在其中更有意义。以上是关于Qt 设计师:嵌套的小部件不是成员吗?的主要内容,如果未能解决你的问题,请参考以下文章
Qt4:从 QDockedWidget 的子类访问 QtDesigner 创建的小部件