7

有一些我不明白的地方Qt Designer。我已经使用它一段时间了,但我仍然总是手动编辑 .ui 文件。

正如在 Qt 的每个教程中都可以看到的那样,创建 GUI 时要做的第一件事就是子类化QMainWindow——例如,为了捕获和重新定义closeEvent()函数。

但是,在 Qt Designer 中子类化(“提升”)是不可能的QMainWindow——你可以用许多其他类来做,但不是这个。

我通常做的是编辑 .ui 文件并更改:

<class>MainWindow</class>
  <widget class="QMainWindow" name="MainWindow">

经过:

< widget class="MyMainWindow" name="MainWindow">

这样我的代码就可以QMainWindow在我的代码中正确子类化:

class MyMainWindow(QMainWindow, object):
    ''' I can redefine closeEvent here! '''

显然,这很奇怪——我可能会错过使用 Designer 的正确方法。但我找不到任何解释。

为什么不能QMainWindow在 Designer 中进行子类化,或者如何以不同的方式构建我的应用程序以避免需要它?

谢谢

4

2 回答 2

4

您通常不需要提升 UI 树的根元素。如果您使用 UI 文件正确初始化您的类,则可以closeEvent在没有它的情况下重新定义。这个答案显示了如何正确地做到这一点。

于 2013-06-10T16:07:14.510 回答
2

我知道这是旧的。我不知何故遇到了同样的问题。我想在子窗口中使用停靠功能。当我尝试推广 QMinWindow 时,我没有在列表中看到它。然后我尝试在下拉列表中使用 QWidget,它神奇地通过了。

只是我的经验。

于 2014-01-21T19:51:17.637 回答