我打赌我的问题从它的标题中显而易见但它可能也不是=)
所以让我详细解释一下......我创建了一个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公开让我成为“非常悲伤的熊猫”...
提前致谢!
答案 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