Qt应用程序中有标准化的管理窗口的方法吗?
Is there a standardized way of managing windows in Qt applications?
我正在寻找管理Qt应用程序窗口的最佳实践或设计模式。
让我解释一下我的意思。假设我有一个应用程序,它有一些窗口(A,B,C),我有需要,比如在window B
中打开window A
,并确保每次调用时都创建一个新的window A
实例,并使用有效的参数,最后当需要显示窗口C时,将现有实例放在前面,如果有其他创建新实例。
当然,现实世界的应用程序要复杂得多,有更多的窗口和限制,所以我不想把我的窗口管理操作扩展到所有的代码中,我把它们放在一个静态的WindowManager
类中。(实际上这个类是一个单例,但我正在考虑把它变成一个静态类)
WindowManager类为系统中的每个窗口持有(私有)QSharedPointer
,因此我可以轻松地从代码中的任何地方操作所有窗口。当我需要显示window X
时,我只需调用WindowManager::showX(params)
,所有的检查和初始化都在该代码中进行。我也有WindowManager::minimizeX()
这样的方法来处理一些逻辑,显示系统托盘消息,然后最小化窗口。
这是一种普遍的需求吗?有解决问题的一般模式吗?你们是如何管理应用程序的窗口的?我所做的(静态WindowManager类)可以接受吗?
编辑:这个应用程序是一个系统托盘应用程序,所以在windows之间没有父子关系;相反,它们都是相互独立的,通常用户通过(全局)热键调用任何窗口。然而,有一些情况下,在一个窗口内,我需要打开另一个,但仍然不能是父和子。
看起来这是一个简单的日常问题,因为还没有任何答案?这对于评论来说太长了,所以我将把它作为答案贴出来,仍然希望其他人能发布最终的一般启蒙模式,尽管;)我希望我有一个适用于所有时间的一般模式。
无论如何,我不会把所有的东西都放到WindowManager"单例"中,因为它在它和所有窗口之间创建了非常强的耦合。这个类可能会变得非常大,因为它包含了所有复杂的规则(你说"真实世界的应用程序"-想象一下在一个类中处理100个Windows…)。它可能变得难以测试并且容易出错,因为一个部分的更改可能会无意中影响其他部分(想象一个bool用于五个窗口……把它翻转过来,它可能会工作四个人,而一个人开始表现得很奇怪)。有一天,它可能会阻止你在其他地方重用某些窗口(比如在另一个程序中,或者只是在同一个程序的另一部分),因为它们需要WindowManager类,而WindowManager类又需要所有其他窗口,所以你不能把这个窗口移到其他地方,因为它会拖走所有其他窗口。我会尝试创建Windows的逻辑组,并尝试处理它们与几个较小的控制器的交互。也许你想看看MVC模式。让控制器决定如何操作模型以及根据用户输入显示哪些视图。
- 当可输入框在窗口中处于活动状态时获得通知的任何方法
- 如何在窗口过程方法中检测击键?
- 设置窗口几何图形特性的正确方法
- 删除父/子窗口层次结构的最佳方法
- Gtkmm - 关闭窗口然后显示另一个窗口的正确方法
- 主窗口的新方法不可见
- 全局挂钩 DLL 仅在 C# 主窗口处于活动状态/前台时调用 C# 回调方法
- 有没有更好的方法来移动窗口
- 在 c++ 生成器中检测绘制线的窗口坐标的最佳方法
- 尝试使用窗口注册表中的路径和 DeleteFile() 方法删除.exe文件
- 在QT中的两个窗口之间进行通信的最佳方法是什么?
- 如何在WebBrowser控件窗口中生成异常.MFC中实现的外部方法
- 当用户更改密码时,哪个窗口 API 调用?钩住这个 API 的好方法是什么
- 有没有什么方法可以让窗口出现,但不让SFML中的cmd出现
- Qt C++从另一个类访问窗口方法
- 在C++窗口代码中有没有任何方法可以阻止鼠标移动到窗口边界之外
- C++:通过进程id、进程句柄和标题名称从进程中获取唯一窗口的窗口句柄的最佳方法
- 单击“关闭控制台窗口”结束 C++ 控制台程序是正确的方法
- 有什么方法可以判断分叉/执行Qt应用程序的主窗口何时显示?
- 面向对象的关闭窗口方法