如何从父QWainWindow的QWidget访问QMainWindow

时间:2018-01-21 07:04:55

标签: c++ qt qt5 qwidget qmainwindow

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

整个画面如下:

QFrame

我尝试修改CaptureTabWidget的构造函数以便接收指向主窗口的 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 +-------------------+ ,但在Designer中提升窗口小部件时,Qt Creator似乎不允许使用自定义构造函数。我想知道这样做的正确方法是什么。

1 个答案:

答案 0 :(得分:3)

如果您只是想写信给父statusBar的{​​{1}},您可以QMainWindowQMainWindow的任何一个孩子发帖,并且该事件会保留传播到父QWidget,直到它到达主窗口,通过更改状态栏中的内容来处理它。换句话说,QFrame中的类似内容可以完成工作:

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

作为旁注,这与Qt(QTableViewQTreeViewQListView,...)中的观点能够更改状态提示的方式相同(当他们的模型提供时)角色QStatusTipEvent)的自定义值,而它们可能深埋在QObject树中......

除了写入父statusBar的{​​{1}}之外的其他目的,我会尝试通过自定义QMainWindow(即具有值之间的值)来概括上述方法QEventQEvent::User)并在QEvent::MaxUser子类中正确处理该事件。我发现这种方式比依赖全局变量/单例(跟踪你所谓的QMainWindow实例)的其他解决方案更清晰,更易于维护。