Qt Designer无法推广QMainWindow

max*_*esa 7 qt designer pyside qmainwindow

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

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

但是,不可能QMainWindow在Qt Designer中进行子类化("提升")- 您可以使用许多其他类来完成它,但不能使用此类.

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

<class>MainWindow</class>
  <widget class="QMainWindow" name="MainWindow">
Run Code Online (Sandbox Code Playgroud)

通过:

< widget class="MyMainWindow" name="MainWindow">
Run Code Online (Sandbox Code Playgroud)

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

class MyMainWindow(QMainWindow, object):
    ''' I can redefine closeEvent here! '''
Run Code Online (Sandbox Code Playgroud)

显然,这很奇怪 - 我可能会错过一些关于使用Designer做到这一点的正确方法.但我找不到任何解释.

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

谢谢

Pav*_*hov 4

通常不需要提升 UI 树的根元素。如果使用 UI 文件正确初始化类,则closeEvent无需它即可重新定义。这个答案展示了如何正确地做到这一点。