C++ 分开编写应用程序核心和gui的最佳实践?

C++ 分开编写应用程序核心和gui的最佳实践?,c++,qt,user-interface,C++,Qt,User Interface,抱歉,如果这听起来有点新鲜。我正在编写一个跨平台的应用程序来学习C++,如果它能很好地工作,它可以帮助人们。我希望它能够以两种方式使用:通过设计的GUI(可能使用QT),或者通过命令行,供想要超越它的专家用户使用 我想知道GUI应用程序和核心之间的通信应该如何进行,因为这将是开源的,我希望代码是好的和干净的 有什么公认的方法可以做到这一点吗?有几种方法可以遵循 首先编写CLI,然后将GUI作为独立程序编写,生成所有处理的CLI版本(通过system()、popen()、fork()、g_spaw

抱歉,如果这听起来有点新鲜。我正在编写一个跨平台的应用程序来学习C++,如果它能很好地工作,它可以帮助人们。我希望它能够以两种方式使用:通过设计的GUI(可能使用QT),或者通过命令行,供想要超越它的专家用户使用

我想知道GUI应用程序和核心之间的通信应该如何进行,因为这将是开源的,我希望代码是好的和干净的


有什么公认的方法可以做到这一点吗?

有几种方法可以遵循

  • 首先编写CLI,然后将GUI作为独立程序编写,生成所有处理的CLI版本(通过system()、popen()、fork()、g_spawn()、CreateProcess()或类似调用)。这可能比编写库要繁琐一些,但如果您已经编写了CLI,或者在批处理等情况下(GUI只是一种奇特的表单,您可以在其中选择参数),则效果会很好

  • 不要将应用程序分成两部分,而是三部分:库、GUI和CLI。该库将包含GUI和CLI之间的所有共享逻辑,例如处理输入格式、编辑操作等。GUI部分将使用库中的函数实现图形界面,CLI将使用相同的库实现命令行界面

  • 使GUI应用程序接受命令行参数,并避免在传递的参数指示在CLI模式下调用小部件库时初始化小部件库。这对于主要是图形化的应用程序(如位图编辑器或编程IDE)来说是可以的,这些应用程序需要公开一些脚本操作。请注意,要在Windows上执行此操作,需要进行一些额外的黑客攻击,请参阅。还要注意的是,这将使得在没有窗口系统的服务器上运行应用程序变得更加困难,因为它仍然会链接GUI库


  • 您可以遵循以下几种方法

  • 首先编写CLI,然后将GUI作为独立程序编写,生成所有处理的CLI版本(通过system()、popen()、fork()、g_spawn()、CreateProcess()或类似调用)。这可能比编写库要繁琐一些,但如果您已经编写了CLI,或者在批处理等情况下(GUI只是一种奇特的表单,您可以在其中选择参数),则效果会很好

  • 不要将应用程序分成两部分,而是三部分:库、GUI和CLI。该库将包含GUI和CLI之间的所有共享逻辑,例如处理输入格式、编辑操作等。GUI部分将使用库中的函数实现图形界面,CLI将使用相同的库实现命令行界面

  • 使GUI应用程序接受命令行参数,并避免在传递的参数指示在CLI模式下调用小部件库时初始化小部件库。这对于主要是图形化的应用程序(如位图编辑器或编程IDE)来说是可以的,这些应用程序需要公开一些脚本操作。请注意,要在Windows上执行此操作,需要进行一些额外的黑客攻击,请参阅。还要注意的是,这将使得在没有窗口系统的服务器上运行应用程序变得更加困难,因为它仍然会链接GUI库


  • 我让很多GUI应用程序接受命令行参数。我在Qapplication课上处理这些。如果GUI不需要显示,我不会调用它或使用app.exec()。虽然在其他应用程序中,我使用相同的基本库,但不包括GUI。要获得问题的答案,您必须阅读一些书籍。例如:我让我的许多GUI应用程序接受命令行参数。我在Qapplication课上处理这些。如果GUI不需要显示,我不会调用它或使用app.exec()。虽然在其他应用程序中,我使用相同的基本库,但不包括GUI。要获得问题的答案,您必须阅读一些书籍。非常感谢,这真的很有帮助。顺便说一句,我有疑问,你有答案,你帮助了我,还有未来的观众。我真的不明白那些反对票。非常感谢,这真的很有帮助。顺便说一句,我有疑问,你有答案,你帮助了我,还有未来的观众。我真的不明白那些反对票。