gpt4 book ai didi

c++ - 如何从父级不是 QMainWindow 的 QWidget 访问 QMainWindow

转载 作者:行者123 更新时间:2023-11-30 02:21:24 28 4
gpt4 key购买 nike

我正在 OSX 下使用 Qt Creator (Qt5.10) 编写 GUI。我有一个用于主应用程序窗口的 QMainWindow。在这里面我有一个 QTab 小部件,其中我有整个小部件(我们称它为 CaptureTabWidget,它包含一些额外的小部件和一个 QFrame(此 QFrame 的父级是 QTab。在最后一个小部件中,我将绘制一些东西。关键是我想在 statusBar< 中写入QMainWindow 一些值与鼠标在该 QFrame 中的位置相关,但我不知道如何从方法访问主窗口在包含 QFrameCaptureTabWidget 中。

整个画面是这样的:

                 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*,但在设计器中提升小部件时,Qt Creator 似乎不允许自定义构造函数。我想知道什么是正确的方法来做到这一点。

最佳答案

如果您只是想写入父QMainWindowstatusBar,您可以发布一个QStatusTipEvent。到您的 QMainWindow 的任何子级,并且该事件将继续传播到父级 QWidget 直到它到达主窗口,在主窗口中通过更改状态中的内容来处理它酒吧。换句话说,您的 QFrame 中的类似内容可以完成这项工作:

QCoreApplication::postEvent(this, new QStatusTipEvent("your tip"));
// ^^^^
// assuming this is a pointer to your QFrame object

作为旁注,这与 Qt 中的 View (QTableViewQTreeViewQListView、...)相同更改状态提示(当他们的模型为角色 Qt::StatusTipRole 提供自定义值时),而他们可能深埋在 QObject 树中...


除了写入父 QMainWindowstatusBar 之外,我会尝试通过自定义 QEvent 来概括上述方法>(即值介于 QEvent::UserQEvent::MaxUser 之间的值)并在我的 QMainWindow 子类中适本地处理该事件。我发现这种方式比其他依赖于全局变量/单例的解决方案(跟踪您假定的一个 QMainWindow 实例)更清洁和更易于维护。

关于c++ - 如何从父级不是 QMainWindow 的 QWidget 访问 QMainWindow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48364464/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com