如何为大型跨平台C++项目编写GUI?

Igo*_*Oks 21 c++ user-interface cross-platform

我有一个大型的跨平台(Linux和Windows)C++项目,我想为其创建一个GUI.

关于此类项目的GUI基本原理,我几乎没有一般性的问题:

  1. GUI应该与应用程序的逻辑分开吗?
  2. 如果它是分开的,逻辑和GUI应该如何通信?TCP/IP套接字是一个不错的选择吗?还有什么其他可能性?
  3. 使用不同于C++的语言使用GUI是一个好主意吗?如果是 - 哪种语言?
  4. 拥有基于浏览器的GUI是一个好主意吗?
  5. 即使项目的核心逻辑是跨平台的,我可以决定GUI只是基于Windows(.NET?),它将通过Socket或类似方法与相关Win/Linux机器上的逻辑进行通信.这样做是个好主意吗?

And*_*Dog 26

  1. GUI应该与应用程序的逻辑分开吗?

    当然是....

  2. 如果它是分开的,逻辑和GUI应该如何通信?TCP/IP套接字是一个不错的选择吗?还有什么其他可能性?

    ......但不是那么多.套接字会过度(例外:见问题5).通常,您在GUI和后端部分中拆分类.然后GUI类调用后端的方法.

  3. 使用不同于C++的语言使用GUI是一个好主意吗?如果是 - 哪种语言?

    如果是这样,你必须整合这两种语言,所以我建议用同一种语言编写所有内容.但要回答你的问题,你可以为你的后端创建Python绑定,并用Python编写GUI(使用PyGTK,PyQT或wxWidgets).

  4. 拥有基于浏览器的GUI是一个好主意吗?

    这取决于您希望如何部署应用程序.如果它应该安装在每台客户端计算机上,则Web界面没有意义.如果您想集中托管它,那么您可以选择Web界面.

  5. 即使项目的核心逻辑是跨平台的,我可以决定GUI只是基于Windows(.NET?),它将通过Socket或类似方法与相关Win/Linux机器上的逻辑进行通信.这样做是个好主意吗?

    我认为只有当后端必须是某种安全(即不得安装在用户的计算机上)或者如果你有类似瘦客户端的方法时才有意义.编写跨平台的GUI比编写跨平台后端(在我看来),所以你宁愿跨平台做两个部分.顺便说一下,基于.NET的GUI不仅仅是Windows - 例如,Mono已经支持Windows窗体的一个很好的子集(但遗憾的是不支持WPF).

编辑:

关于你的单声道问题:单声道大多是稳定的,但并非一切都已实现.可以肯定的是,您可以运行Mono迁移分析器(MoMA)来查明Mono中是否有不起作用.但我认为很多公司在生产环境中成功使用Mono 这一事实意味着您至少应该考虑将Mono作为一种选择!

  • 我喜欢你的答案,但我完全不同意:"编写跨平台的GUI比编写跨平台后端要容易得多".我完全相反.如果你编写vanilla C++代码(好的,乐观的),那么很少有可移植性问题.但是,使富有的,现代的GUI保持一致并满足可移植性以及本机OS用户体验可能是一个真正的挑战 - 有时它原则上是矛盾的. (9认同)