4

来自 C++ 和 MFC 背景,在开发应用程序 GUI 时是否有更好的(可维护性/自定义)平台?

我们正在开发工业应用(机器视觉),其中:
- 性能关键型(主要是 CPU atm 中的图像处理,但 GPU 次之) -
低级硬件接口(内部 PCI 设备、图像采集卡、运动卡)
- 实时数据可视化(图像/统计图)
——未来的路线图包括分布式处理和远程访问的网络化。

跨平台对我们来说并不重要,因为系统在受控环境中运行(客户只关心系统是否运行以及他们是否获得了输出)。

还有迁移成本方面的担忧(第三方依赖、开发人员和服务人员的培训成本)

编辑
关于上述“图像处理”的说明:
我指的是“图片”(矩阵格式的 2D 信息)而不是图形(通常是 3D 矢量化)。目前我们使用第 3 方成像库(用于空间域处理,如分割、OCR/OCV、形态学、模式匹配)并结合我们的结果逻辑。

4

3 回答 3

3

如果您需要对性能至关重要的图形处理,那么 C++/DirectX 或 C++/OpenGL 是您最好的选择,毫无疑问。C++/DirectX 可以说是两者中更易于维护的。

也就是说...根据您正在执行的实际处理,您可能会考虑将部分 UI 移动到更易于维护的平台。.NET 框架/WPF 可以做一些非常了不起的事情,并且可以很好地实现 MVVM 等模式,并且可以惊人地维护。网络方面也是如此;WCF 从代码中抽象出许多通用协议,使网络代码更简洁、更易于维护。您甚至可以在 C++/CLI 中编写非托管处理和托管层之间的转换层。

也就是说,这都是非常主观的。我无法从您的要点中得出足够的信息来判断您是否可以将部分甚至全部处理卸载到 .NET/C#。值得考虑,但我的直觉告诉我,这可能不是你最好的选择。

于 2010-09-17T02:29:29.350 回答
3

作为Qt的粉丝,我会很失职,更不用说它了。

  • 尽管跨平台不是您的标准之一,但这是一个不错的奖励。
  • Qt 还通过 OpenGL 提供了良好的视频硬件支持(但我不确定它是否有助于捕获硬件)。
  • 它是开源的,因此您可以随心所欲地弄脏手。
  • 它是高度可定制的。
  • 它正在积极开发并拥有庞大的社区。
  • MFC 程序员在跟上速度应该不会有太大的困难。

您还应该通读其中一些问题和答案:

适用于 Windows 的优秀 C++ GUI 库 https://stackoverflow.com/questions/610/gui-programming-apis

于 2010-09-17T02:35:12.057 回答
2

我之前在开发 C++ 科学应用程序时所做的是,它将完全在基于控制台的应用程序下开发。基于控制台的应用程序将能够接受来自用户键盘的各种类型的命令,并相应地执行操作。例如 :

image_processor > load input.png
image_processor > save out.png

这样做的好处是,我可以 100% 专注于我的算法设计,而不用担心如何适应 GUI 框架。它们是 MFC 或 QT。

在一天结束时,我将简单地将基于控制台的应用程序的 STDIN 连接到 GUI 应用程序通信通道,而不是从键盘输入流中获取输入。然后,我的 GUI 应用程序将基于字符串的命令,与控制台应用程序对话并接收反馈。

猜猜我用什么来开发 GUI?Java Swing:)

我想我正在采用 Unix 人的方法。看看乔尔怎么说:

假设您让一位 Unix 程序员和一位 Windows 程序员负责创建相同的最终用户应用程序。Unix 程序员将创建一个命令行或文本驱动的内核,偶尔会在事后构建一个驱动该内核的 GUI。这样,应用程序的主要操作将可供其他程序员使用,他们可以在命令行上调用程序并将结果作为文本读取。Windows 程序员倾向于从 GUI 开始,偶尔会在事后添加一种脚本语言来自动化 GUI 界面的操作。

我意识到通过采用 Windows 方法,你最终会得到一个更多的user friendly应用程序。但是,如果您主要关心的是编写好复杂的算法而 GUI 是次要的,我建议您使用 Unix 方法。

于 2010-09-18T06:25:46.413 回答