首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从父级不是QMainWindow的QWidget中访问QMainWindow

如何从父级不是QMainWindow的QWidget中访问QMainWindow
EN

Stack Overflow用户
提问于 2018-01-21 07:04:54
回答 1查看 1.7K关注 0票数 2

我正在OSX下用Qt5.10 (Qt5.10)编写GUI。我有一个QMainWindow作为主应用程序的窗口。在这里面我有一个QTab小部件,其中我有整个小部件(让我们称它为CaptureTabWidget,它包含一些附加的小部件和一个QFrame (这个QFrame的父函数是QTab)。在最后这个小部件中,我将画一些东西。要点是,我想在statusBar of QMainWindow中编写一些与鼠标在QFrame中的位置相关的值,但是我不知道如何从包含QFrameCaptureTabWidget方法中访问主窗口。

整个画面是这样的:

代码语言:javascript
复制
                 X
+-----------+  XXX
|MainWindow | XXXXXXXXX
+-----+-----+  XXX    XXXXXX
      |          X         XXX
+-----v------------+          XX
|QTabWidget        |           XX
|No parent         |            XX
+-----+------------+             XX
      |                           X
+-----v-------------+          ?? X
|CaptureTabQWidget  |             X
|Parent:QTabWidget  |             X
+-----+-------------+            X
      |                         X
+-----v-------------+         XX
|QFrame             |    XXXXXX
|Parent:CaptureTab  | XXX
+-------------------+

我尝试过修改CaptureTabWidget的构造函数,以便接收指向主窗口的QMainWindow*,但似乎constructor在提升设计器中的小部件时不允许自定义构造函数。我想知道怎样才是正确的方法。

EN

回答 1

Stack Overflow用户

发布于 2018-01-21 11:15:29

如果您只打算写入父statusBarQMainWindow,您可以向您的QMainWindow的任何子级发布QStatusTipEvent,并且该事件将一直传播到父QWidget,直到它通过更改状态栏中的内容而到达主窗口。换句话说,在您的QFrame中这样的东西可以完成以下工作:

代码语言:javascript
复制
QCoreApplication::postEvent(this, new QStatusTipEvent("your tip"));
//                          ^^^^
//                          assuming this is a pointer to your QFrame object

顺便提一下,Qt中的视图(QTableViewQTreeViewQListView,.)中的视图也是这样。能够更改状态提示(当它们的模型为角色Qt::StatusTipRole提供自定义值时),而它们可能被埋在QObject树的深处。

除了写入父类的statusBar之外,我还会尝试通过拥有一个自定义QEvent (即在QEvent::UserQEvent::MaxUser之间有值的QEvent)并在QMainWindow子类中适当地处理该事件来推广上述方法。我发现这种方式比依赖全局变量/单例的其他解决方案更简洁、更易于维护(这些解决方案可以跟踪您所认为的一个QMainWindow实例)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48364464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档