如何在QT中获取顶层(基础)父窗口小部件?

14

我正在创建一款软件,必须能够被父级部件(或父级的父级的子级,以此类推)和子级部件(或子级的子级的父级,以此类推)访问。

例如:

QWidget_Principal --> WidgetApplications --> WidgetMenuBar --> PushButtonFullScreen.
问题在于我能做到的方法是这样的,就是执行:

this->parentWidget()->parentWidget()->parentWidget()->showFullScreen();

有没有简单的方法可以做到这一点?

提前感谢您 很抱歉我的英语非常糟糕。

Luis Da Costa

4个回答

36

使用QWidget * QWidget::window () const函数,可以获取你的窗口小部件所属的窗口小部件。

还有一个名为QWidgetList QApplication::topLevelWidgets () [static]的函数,可以获取应用程序中所有顶级窗口小部件的列表...


6

另一种方法:

QWidget* topWidget = QApplication::topLevelAt(yourWidget->mapToGlobal(QPoint()));

3

只需编写一个全局函数:

QWidget* TopLevelParentWidget (QWidget* widget)
  {
  while (widget -> parentWidget() != Q_NULLPTR) widget = widget -> parentWidget() ;
  return widget ;
  }

最好使用动态转换以确保您获得正确的QWidget。 - Jens

1

非常简单的Python答案,当然要在任何子窗口小部件类中调用此函数:

top_widget = self
while top_widget.parentWidget(): top_widget = top_widget.parentWidget()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接