【问题标题】:Qt Designer can't promote QMainWindowQt Designer 无法提升 QMainWindow
【发布时间】:2013-06-06 06:47:36
【问题描述】:

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

正如在 Qt 的每个教程中可以看到的那样,创建 GUI 时要做的第一件事就是继承 QMainWindow - 以便捕获和重新定义 @例如 987654323@ 函数。

但是,不能在 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 进行子类化,或者如何以不同的方式构建我的应用程序以避免需要它?

谢谢

【问题讨论】:

    标签: qt pyside designer qmainwindow


    【解决方案1】:

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

    【讨论】:

    • 感谢您指出这个答案。但这表明有人遇到了同样的问题并创建了一个破解方法来解决它。现在我不太清楚这是否是 Pyside 错误。使用 Qt/C++ 或 PyQt 时,从 Ui 文件顶级类的实例中调用 load() 直接将加载的小部件映射到当前实例?这在 QUiLoader 文档中绝对没有这样解释。还是很疑惑。
    【解决方案2】:

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

    只是我的经验。

    【讨论】:

      猜你喜欢
      • 2014-10-24
      • 2016-07-05
      • 1970-01-01
      • 2017-06-06
      • 2013-11-06
      • 2013-11-15
      • 1970-01-01
      • 2014-07-18
      • 2014-10-05
      相关资源
      最近更新 更多