用户界面-如何去gui一个复杂的纠缠c++ /Qt4应用程序
user interface - How to de-GUI a complex tanglewad C++/Qt4 app?
我们有一个用c++和Qt4编写的大而混乱的应用程序,许多库依赖,数百个类,没有连贯的结构。它通常作为GUI应用程序以交互方式运行,但有时它以一种不干涉的方式从另一个程序启动,该程序为其提供命令行选项并通过dbus与之通信。GUI仍然显示,但没有人或训练有素的猴子在那里点击任何东西。"放松并观看闪烁的灯光",无论是交互式的还是自动的,当运行时,应用程序写入图像文件。
我接下来几周的工作是添加一个"无gui"功能,这样应用程序就可以在不显示gui的情况下以不干涉的方式运行并编写其图像文件。在内部,要编写的图像是使用QImage和其他非GUI Qt对象制作的,但是这些对象被其他对象所拥有,这些对象确实涉及Qt的GUI类。在几次尝试理解混乱之后,我找不到一种方法来解开诸如让应用程序在没有完整GUI运行的情况下创建图像之类的事情。有一段时间,我希望我能设置xxx。可见= false;对于所有xxx的GUI对象,但这是不实际或不可能的(AFIK)。
在这个应用程序中添加这个无gui功能有什么通用策略吗?一些不需要深入重新设计类层次结构的技术?
漫长而艰难的方法是找出逻辑是什么以及如何执行的,将逻辑提取到一些基于QObject的类(带有信号和插槽),并使其成为QtCore应用程序。我知道这没有帮助,但这是correct
的方式。
如果不能将所有GUI元素设置为隐藏(或者可能只有QMainWindow?),那么这是您唯一可以做的事情。
Qt允许您这样做,但如果原始编码器没有计划这一点,您将有很多重构/重新编码要做。
这实际上取决于程序是如何编写的。如果逻辑在某种程度上与接口分离,那么它可以像找出从QMainWindow
类继承的类并确保从未初始化一样简单。
在逻辑遍布的情况下,我强烈建议尝试将所有逻辑转换为signal
或slot
的形式(考虑到这是一个GUI应用程序,可能已经发生了),然后只是不初始化QMainWindow
实例并手动调用这些。
尝试子类化接口类(QMainWindow, QDialog等),并在那里实现您的逻辑。
- 函数复杂度分析
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- while循环中while循环的时间复杂度是多少
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- 函数的时间复杂度是多少?
- 如何检查两个 std::向量在小于 O(n) 的时间复杂度内是否相等
- 使用 Python Extension API 包装复杂C++类
- 时间复杂度 当具有复合数据类型(如元组或对)时?
- 如何计算此排序函数的时间复杂度?
- 计算两个代码块的时间复杂度
- 将平面阵列重塑为复杂的特征类型
- 将复杂的非基元C++数据类型转换为 Erlang/Elixir 格式,以使用 NIF 导出方法
- 当 A 在 for 循环中调用函数 B 时,如何计算函数 A 的空间复杂度?
- 如何在复杂继承中访问静态成员变量
- C++ 中具有 O(1) 搜索时间复杂度的数据结构
- OpenCV 傅里叶变换复杂输出问题
- 具有嵌套 if-else 的循环的时间复杂度
- 在 for 循环中处理复杂的发送 recv 消息
- C++:如何用单个命令替换复杂的迭代?
- 用户界面-如何去gui一个复杂的纠缠c++ /Qt4应用程序