Qt4:从 QDockedWidget 的子类访问 QtDesigner 创建的小部件
Posted
技术标签:
【中文标题】Qt4:从 QDockedWidget 的子类访问 QtDesigner 创建的小部件【英文标题】:Qt4: Accessing QtDesigner-created widgets from a subclass of QDockedWidget 【发布时间】:2012-08-15 23:22:58 【问题描述】:我敢打赌,我的问题从它的标题就很明显了,但也可能不是 =) 所以让我详细解释一下……我创建了一个 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 公开的想法让我成为“非常悲伤的熊猫”...
提前致谢!
【问题讨论】:
你说的是“提升到...”功能吗? 是的 jdi。我的意思是我推广它。 【参考方案1】:当您说“我创建了一个 QDockWidget,然后使用设计器将其转换为子类”时,我唯一能想到的意思是您使用“提升到...”操作将其转换为QDockWidget 的编码子类的占位符。这意味着它希望将代码中的版本放在那个位置。如果您的设计器具有在该停靠小部件中布置的小部件,它们将不会自动组合到该类定义中。它们将作为 ui 对象上的属性,与同一个停靠小部件平行。
如果您想将 QLabel 和 QPushButton 组合为该自定义子类的一部分,那么您需要做的是在代码中定义它们,而不是作为可视布局的一部分。然后他们将成为该实际子类的成员。
到目前为止,我相信您会在您的 ui 上找到一个嵌套的 QLabel:
ui->dockWidgetContents_3
ui->pushButton_1
ui->label_1
(或者你选择在你的类中包含你的用户界面)
现在假设您仍然希望能够直观地设计 QDockWidget 的内容区域。您可能会做的是在视觉上将其设计为单独的小部件。然后将 QDockWidget 的 dockWidgetContents
提升为您的自定义 QWidget。然后,它将能够将此组合放置为具有自己子项的小部件。
ui->CustomDockWidget->widget()->label_1
【讨论】:
它希望从 DockWidget(我从 Designer 提升 QDockWidget 的编码子类)中更改添加的 QLabels 的值 如果您没有将子类编码为具有 QLabels,那么您在设计器中布置的那些不是该子类的一部分。他们是父母的一部分。 我的意思是我知道在哪里可以找到它们(在 MainWindow 中),但我不希望 MainWindow 有大量与 DockedWidget 及其功能相关的代码。 frommyquestion>>>查看 ui_mainwindow.h 但是对此事有所了解。小部件位于 dockWidgetContents_3 上,它是一个没有父级的 QWidget。换句话说,你告诉我给标签编码? 是的,这正是我要说的。发生的情况是它正在使用您的自定义子类,但随后创建了一个通用小部件以设置为其内容。然后在其中编写您的标签。它们不属于您的子类。以上是关于Qt4:从 QDockedWidget 的子类访问 QtDesigner 创建的小部件的主要内容,如果未能解决你的问题,请参考以下文章