【问题标题】:Switching app "states" using QMainWindow as superclass使用 QMainWindow 作为超类切换应用程序“状态”
【发布时间】:2017-09-02 02:19:49
【问题描述】:

我正在尝试运行我的应用程序的不同模式/状态,例如,有一个菜单可以进入游戏状态,然后是高分,然后从这两个返回菜单。

我尝试的一个解决方案是使用自动生成的类QMainWindow 作为超类来创建类MenuGame。在QMainWindow 中,我稍后想创建一个QMainWindow,用MenuGame 填充它,然后在例如。 QMainWindow.paintEvents() 通过多态调用Menu.paintEvent()

现在我知道我无法在另一个 QMainWindow 中创建 QMainWindow,但是这个想法是否适用于另一个名为 states 的子类或现有超类/子类之间的东西?

我只能自己运行Game(而不是QMainWindow),所以继承可能是正确的。但是,当尝试在QMainWindow 中仅创建和运行Game 时,它在QMainWindow 的构造函数中给了我一个sigsegv(我没有更改它,如果为空,它本身运行完全正常)。我已经解决了包含彼此在内的类的问题,所以这也不是问题。

【问题讨论】:

  • 1) 要获得有关 sigsegv 的有用帮助(以及您的问题的其余部分),一些最少的代码将有助于显示您的尝试。 2)您可以在另一个 QMainWindow 中创建一个 QMainWindow,没有什么能阻止您。 3) 很少需要多个 QMainWindows,根据您的描述,您可能甚至不需要一个。该类带有方便的默认功能和布局,但如果您不使用它的菜单栏、停靠小部件等,您最好扩展一个普通的 QWidget 以用作应用程序的主窗口。跨度>
  • 非常感谢您的意见。我基本上有 QMainWindow atm,但没有所有菜单和额外功能,所以我可能应该研究如何使用 QWidget。我想我也可以通过拥有一个接收 QMainWindow/QWidget 接收内容的State 类来解决我的主要问题并将其转发给它的子类(没有 State 本身是一个子类)。

标签: c++ qt inheritance polymorphism


【解决方案1】:

我通过为菜单和游戏创建一个超类“State”来解决这个问题(没有使 State 成为 QMainWindow 的子类),每个操作由 QMainWindow 调用。

这本质上是我意识到在实施后存在的“状态”模式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多