我对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做正确方法的一些方法。但我找不到任何解释。
为什么不能在Designer中继承QMainWindow
,或者如何以不同的方式构建我的应用程序以避免需要它?
由于
答案 0 :(得分:4)
您通常不需要提升UI树的根元素。如果使用UI文件正确初始化类,则可以在没有它的情况下重新定义closeEvent
。 This answer显示了如何正确执行此操作。
答案 1 :(得分:2)
我知道这是旧的。我不知怎的遇到了同样的问题。我想在子窗口中使用对接功能。当我尝试推广QMinWindow时,我没有在列表中看到它。然后我尝试在下拉列表中使用QWidget,它神奇地经历了。
只是我的经历。