我正在使用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似乎不允许使用自定义构造函数。我想知道这样做的正确方法是什么。
答案 0 :(得分:3)
如果您只是想写信给父statusBar
的{{1}},您可以QMainWindow
向QMainWindow
的任何一个孩子发帖,并且该事件会保留传播到父QWidget
,直到它到达主窗口,通过更改状态栏中的内容来处理它。换句话说,QFrame
中的类似内容可以完成工作:
QCoreApplication::postEvent(this, new QStatusTipEvent("your tip"));
// ^^^^
// assuming this is a pointer to your QFrame object
作为旁注,这与Qt(QTableView
,QTreeView
,QListView
,...)中的观点能够更改状态提示的方式相同(当他们的模型提供时)角色QStatusTipEvent
)的自定义值,而它们可能深埋在QObject
树中......
除了写入父statusBar
的{{1}}之外的其他目的,我会尝试通过自定义QMainWindow
(即具有值之间的值)来概括上述方法QEvent
和QEvent::User
)并在QEvent::MaxUser
子类中正确处理该事件。我发现这种方式比依赖全局变量/单例(跟踪你所谓的QMainWindow
实例)的其他解决方案更清晰,更易于维护。