【发布时间】:2014-09-25 19:15:21
【问题描述】:
我在C++ 完成了一个项目。它是一个控制台应用程序,使用 CodeBlocks 创建。尽管我认为它在这个问题的范围内并不那么重要:该应用程序管理有关小公司的账单和客户的数据。该程序是完整的,可以通过控制台用户界面非常容易地扩展(现在,我以程序员的身份运行它)。
现在我决定使用Qt 和带有 QtDesigner 的 QtCreator 来学习 GUI 编程!
不仅因为在创建 GUI 应用程序时将逻辑与 GUI 分离是常见的做法,我想将我的项目分为两大部分来实践,当然,即 逻辑 和 图形界面。
你已经知道逻辑部分是完整的;我拥有的是一个名为project 的项目文件夹,其中包含另一个文件夹(CodeBlocks 项目)project_logic,它再次包含几个类,因此包含头文件和实现文件(以及一个主文件,最终当然会过时)。它还包含程序读取/写入的文件。它是用“纯”C++ 编写的,none 使用了Qt 提供的方式,对我来说重要的是它保持这种方式!
现在我在project文件夹中添加了一个Qt项目project_gui并开始创建GUI,只实现最基本的功能,比如在对话之间切换,关闭应用程序等。到目前为止它知道没有关于它未来的后端 (project_logic)。
作为第三个组件,我需要某种控制,它将应用程序的逻辑与其GUI 联系起来。这是我的概念性问题:将它们放在一个应用程序中的最佳方法是什么?
建议
由于
project_logic可以单独作为控制台应用程序工作,它已经提供了最基本的控制组件和功能。这将保持这种状态,因为我想保留它的独立功能。更是如此,因为我对 GUI 编程完全陌生和/或在两周内我可能会碰巧为相同的逻辑创建另一个 GUI。结果将是逻辑部分的类像任何其他标题一样包含在 GUI 源代码中,并用于创建具有完整功能的程序。验证用户输入将依赖于 GUI 部分。程序的逻辑在任何情况下都可以更新。使 GUI 尽可能可重用;我是否应该实现第三个组件 à la
project_controlling,它提供 GUI 和逻辑之间的交互(通过控制完成的用户输入验证),因为这两者中的每一个都尽可能地保持独立? GUI不包括逻辑头,可以说,但包括控制头?
我承认,第二点听起来有点奇怪;简而言之,我的目标是:
- 保持
project_logic标准C++和独立(在修补、添加功能等方面...)和 - 将
Qt用于 GUI,最大限度地(同时合理地)分离 GUI 和逻辑。
思路
我应该通过
#include "../project_logic/header1.h"等包含project_logic标头吗? (使用类可能会出现问题,我将在单独的问题中发布。)我应该将它们作为子项目包含进来吗?
如何“在代码中”连接部件?
逻辑函数还能找到我前面提到的文件(读/写)吗?
请记住以下几点:我是 GUI 编程的新手! 我尽力解释了我的想法/问题...但是,我知道 C 和 C++ 并编写控制台应用程序我用于例如我认为,在大学进行模拟并且可以很好地处理标准的东西。即使潜在的回答者感觉想提出一种非常不同的方法,我也会感谢我提出的概念的“解决方案”。我在介绍中解释了原因。不用说,我当然有兴趣听到不同的建议。
在我做了一些研究并以“试错”方式尽力而为之后,我决定发布这个问题。 StackOverflow 和其他板上有很多关于这个主题的信息,所以我想提出我的想法并收集批评和意见,而不是添加另一个“如何做?”问题的大杂烩。
由于这个问题是关于一般方法的,我可能会(非常肯定... :-P )稍后提出更多技术问题,一旦出现,我想将其编辑到这个问题(超链接)中。 但是,如果有这方面的基本食谱,当然是受欢迎的。
在一些 cmets 和答案之后,我想发布一点 EDIT 来说明一下:
逻辑当前状态
-
project_logic或多或少已完成并在 CodeBlocks 中编码为 CodeBlocks 项目。 - 它可以作为带有“控制台用户界面”的控制台应用程序工作。 (它有一个
main.cpp,现在只用于调试。) - 其组件尽可能地划分为类(头文件和 cpp 实现文件)。
GUI的当前状态
-
project_gui正在设置为 Qt-Widget-Application 项目(使用 QtCreator/Designer)。 - 到目前为止,只是 GUI,仅此而已(与
project_logic没有任何联系)。
目标和...
...工作流程,我想遵循,因为这是我的第一个大项目:
-
project_logic和project_gui不会离开各自的目录;它们都在一个名为project的目录中。 (例外:逻辑将导出为 dll(或类似的东西)如有必要,然后提供给 GUI。) - 如果
project_logic中有要更改的内容,我想在 CodeBlocks 中进行更改(并重复上述可能的导出)。 -
project_logic(或任何第三层,例如project_controlling)必须以最简单的方式为project_gui一次性使用......(参见Trains of thinking number 1):-P
【问题讨论】:
-
还有“你好,StackOverflow!” :-)
-
我想@我的link to another question,它还涉及项目的设置和结构(实际上是这个项目)。对于在设置他们的第一个 Qt 项目的过程中问自己相同问题的用户来说,它可能很有用。
标签: c++ qt user-interface separation-of-concerns conceptual