MDI模式还是停靠窗口?

7
在我们开发的QT应用程序中,需要显示多个“查看器窗口”(以在XY平面、YX平面、XZ平面和3D中显示数据)。
我们原本希望使用MDI应用程序模型,但后来客户要求可以通过拖动在多个桌面(使用多个监视器)中查看“查看器窗口”,这无法使用MDI窗口模型完成,因为我们不能将MDI窗口移动到主应用程序窗口之外。
唯一可能的方法是使用停靠窗口,因为它们可以从主应用程序窗口中取消停靠并移动到其他桌面,但停靠窗口主要用于工具面板或实用程序窗口。

(http://doc.qt.nokia.com/4.6/qdockwidget.html#details)

使用停靠窗口是否是满足我们需求的良好实践?


你解决了这个问题吗? - Beachwalker
是的,只需使用没有父级的QWidgets。必须管理上下文以保持窗口(QWidgets)列表,并使用此上下文进行同步。 - Ashika Umanga Umagiliya
1个回答

4
我不会使用QDockWindow,因为看起来您将不使用客户端区域。此外,您不希望将窗口停靠在MainWindow边框上,而只是将小部件添加到MainWindow中。
我认为您可以尝试使用多个QWidget和QGridLayout。将QWidget拖动到MainWindow之外时,只需从布局中删除QWidget。将QWidget拖动到MainWindow内部时,在QGridLayout中的适当位置添加QWidget。使用此方法,您还可以在MainWindow中切换小部件的位置。
我不知道是否足够清楚,但我想到了与QtDesigner在布局中拖动新元素时相同的方式。拖动小部件时,您可以看到松开鼠标按钮后它将被添加的位置。
在我的想法中,这种方法可能是您正在寻找的方法。
希望能对您有所帮助。

非常感谢你的答案!我将尝试按照你建议的方式实现。但似乎需要一些巧妙的技巧。 我需要使用QGridLayout的SDI模型,但如何在没有父级的情况下显示QWidgets? - Ashika Umanga Umagiliya
2
如果一个小部件没有父级,则它将成为一个独立的窗口,就像在QWidget的详细描述中所解释的一样:http://doc.qt.nokia.com/4.6/qwidget.html#details。 - Patrice Bernassola

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