0

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

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

this->children().count()

返回这个:

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

而且它们都不包含我想要获得的QLabels和其他tish)。然而,查看 ui_mainwindow.h 可以对此事有所了解。小部件位于 dockWidgetContents_3 上,它是一个没有父级的 QWidget。所以唯一的方法似乎是通过 MainWinsow 的 ui->... 访问它,并且考虑公开 ui 让我成为一个“非常悲伤的熊猫”......

提前致谢!

4

1 回答 1

1

当您说“我创建了一个 QDockWidget,然后使用设计器将其转换为子类”时,我唯一能想到的意思是您使用“提升到...”操作将其转换为占位符QDockWidget 的编码子类。这意味着它希望将代码中的版本放在那个位置。如果您的设计器具有在该停靠小部件中布置的小部件,它们将不会自动组合到该类定义中。它们将作为 ui 对象上的属性,与同一个停靠小部件平行。

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

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

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

(或者您选择将您的 ui 包含在您的课程中)

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

ui->CustomDockWidget->widget()->label_1
于 2012-08-15T23:54:05.590 回答