多个QMainWindow实例?

34

QMainWindow是Qt应用程序中的主窗口。通常情况下,您只会有一个主窗口,但在您的应用程序中是否可能拥有多个QMainWindow实例呢?

我正在将基于Qt的GUI应用程序B集成到另一个基于Qt的GUI应用程序A中。这两个应用程序都有一个QMainWindow,我考虑首先创建一个新的QMainWindow,在选项卡上包含旧的QMainWindows。这样可以让我集中精力将GUI B的后端连接到A的后端,而无需更改用户界面本身。这种方法可行吗?还是你有其他建议?


我处于非常相似的情况下,我需要两个QMainWindows。如果你已经这样做了,你有没有答案来回应@caleb-huitt-cjhuitt所指出的警告呢?也就是Mac上会发生什么事情? - S B
1个回答

43
您可以拥有任意数量的QMainWindow实例。 QMainWindow只是提供菜单栏、工具栏、状态栏和停靠框架的QWidget。但基本上它只是一个QWidget,所以您可以随意拥有多个。
出于GUI设计的原因,通常只有一个单独的QMainWindow,因为拥有多个主窗口可能会令人困惑。然而,在实现如QtAssistant之类可以打开自己新实例的应用程序时,则同一进程有多个主窗口。
您建议的方式应该是可行的。除非您还想在该窗口中添加工具栏,否则选项卡窗口不需要成为QMainWindow

4
我唯一需要补充的是,如果你要将其移植到OS X系统上,菜单可能会变得有些奇怪。它们需要特殊处理才能在屏幕顶部工作,我不知道在一个实际窗口中有两个主窗口时该如何处理。 - Caleb Huitt - cjhuitt
1
考虑到应用程序中可能有多个QMainWindow,您可以在Mdi SubWindow内使用其停靠框架吗?这是一个好的实践吗? - Anonymous
@匿名用户:好主意! - CapelliC
1
这些子QMainWindow如何出现在主应用程序窗口中?它们是如何排列的:像MDI窗口,重叠在彼此上方还是需要将它们放置在某个容器中,例如选项卡小部件或堆叠小部件中,或者它们是独立的 - 如何?附:在这里找到了答案:https://dev59.com/F1jUa4cB1Zd3GeqPPTuX#11860378和https://forum.qt.io/topic/31841/qmainwindow-inside-a-widget-can-be-done-or-is-not-correct/7,需要使用window->setWindowFlags(Qt :: Widget); - Aleksey Kontsevich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接