Qt4:从QDockedWidget的子类访问QtDesigner创建的小部件

时间:2012-08-15 23:22:58

标签: c++ qt4 qt-designer qmainwindow qdockwidget

我打赌我的问题从它的标题中显而易见但它可能也不是=)
所以让我详细解释一下......我创建了一个QDockWidget,然后使用设计器将其转换为(我的意思是提升为......)它的子类。

那么如何正确访问我放置的小部件呢?我们的想法是所有子类的对象都在子类中处理。问题(你可能知道)是

this->children().count()

返回:

QDockWidgetLayout(0x1022373d0) 
QDockWidgetTitleButton(0x102237510, name = "qt_dockwidget_floatbutton") 
QDockWidgetTitleButton(0x102235500, name = "qt_dockwidget_closebutton") 
QWidgetResizeHandler(0x102235de0) 
QAction(0x102221500) 

其中没有一个包含QLabel和其他我希望得到的东西。然而,查看ui_mainwindow.h可以了解这个问题。小部件位于dockWidgetContents_3上,它是一个没有父级的QWidget。所以唯一的方法似乎就是通过MainWinsow的ui>来访问它......并且考虑让ui公开让我成为“非常悲伤的熊猫”...

提前致谢!

1 个答案:

答案 0 :(得分:1)

当你说“我已经创建了一个QDockWidget然后使用设计器将其转换为子类”时,我唯一可以认为这意味着你使用“提升为......”的动作将其转化为您的QDockWidget的编码子类的占位符。这意味着它希望将代码中的版本放在该位置。如果您的设计器具有在该停靠窗口小部件中布局的小部件,则它们将不会自动组成该类定义。它们将存在的位置是ui对象的属性,与同一个dock小部件并行。

如果您想要将QLabel和QPushButton作为该自定义子类的一部分进行组合,那么您需要做的是在代码中定义它们,而不是作为可视布局的一部分。然后他们将成为该实际子类的成员。

截至目前,我相信你会在你的ui上找到一个嵌套的QLabel:

ui->dockWidgetContents_3
ui->pushButton_1
ui->label_1

(或者你选择将你的ui包括在你的班级中)

现在假设您仍希望能够直观地设计QDockWidget的内容区域。您可能会做的是将其设计为可视化的单独小部件。然后将QDockWidget的dockWidgetContents提升为自定义QWidget。然后,它可以将此合成作为具有自己子项的窗口小部件。

ui->CustomDockWidget->widget()->label_1