我正在寻找最佳实践或设计模式来管理Qt应用程序的窗口。在Qt应用程序中是否有标准化的窗口管理方式?
让我解释一下我的意思。假设我有一个具有一些窗口(A,B,C)的应用程序,并且我需要在window B
内打开window A
,并确保每次调用时都会创建一个带有有效参数的新实例window A
,并且最后需要显示如果有其他创建新实例,则窗口C会将现有实例放在前面。
当然,真实世界的应用程序要复杂得多,并且有更多的窗口和限制,所以我不想在整个代码中传播我的窗口管理操作,并将它们保存在一个静态的WindowManager
类中。 (其实这个类是一个单身,但我正在考虑把它变成一个静态类)
窗口管理类包含一个(私人)QSharedPointer
为系统中的每个窗口,所以我可以很容易地从代码的任何地方操控所有窗口。当我需要显示window X
时,我只需拨打WindowManager::showX(params)
,所有检查和初始化都在该代码中进行。此外,我有像WindowManager::minimizeX()
方法来处理一些逻辑,显示系统托盘消息,然后尽量减少窗口。
这是一种常见的需求,是否存在解决问题的一般模式?你们如何管理你的应用程序的窗口?我所做的(静态WindowManager类)是否可以接受?
编辑:该应用程序是一个系统托盘应用程序,所以窗口之间没有父子关系;相反,它们都是相互独立的,一般用户通过(全局)热键调用任何窗口。然而,有一些情况是我需要打开另一个窗口,但仍然不能成为父母和孩子。
不能说我已经写了任何如此复杂的东西。通常,具有各种对话的主窗口,模态或不需要。处理特定窗口的代码进入该窗口的类。如果该窗口/对话框需要另一个对话框,它将管理所述对话框的设置,但逻辑全部在辅助对话框的类中。有什么可以阻止你使用该模型吗? – casualcoder 2012-01-02 03:20:47
通常父母设立自己的孩子。创建子部件,配置它,启动它。如果有主窗口,那个主窗口通常会处理许多次窗口。没有看到可以将这么多代码分解成一个专门用于窗口创建和管理的独立类,并且这将是一个很好的设计(单例几乎从不)。 – 2012-01-02 06:36:02
@casualcoder:实际上我的应用程序在其大部分时间驻留在系统托盘中,用户通过不同的(全局)热键触发不同的窗口,并且窗口之间没有父子关系。窗口可以在另一个窗口中调用或通过热键打开。这导致我有这样一个问题。 – destan 2012-01-02 07:25:20