我完成了一个项目C++.它是一个使用CodeBlocks创建的控制台应用程序.虽然我认为在这个问题的范围内并不是那么重要:应用程序管理有关小公司的账单和客户的数据.该程序已经完成,可以通过控制台用户界面轻松扩展(现在,我以程序员的身份运行它).
现在我决定学习使用GUI编程Qt和QtCreator及其QtDesigner!
不仅因为在创建GUI应用程序时将逻辑与GUI分离是一种常见做法,我想将我的项目分为两个重要部分,即逻辑和GUI.你已经知道逻辑部分是完整的; 我所拥有的是一个名为project包含另一个文件夹(CodeBlocks项目)的项目文件夹project_logic,它再次包含几个类,因此头文件和实现文件(以及一个主,当然最终会过时).它还包含程序读/写的文件.这是写在"纯" C++,并使用没有提供的手段Qt,这是对我很重要,它保持这种方式!
现在我在-folder中添加了一个Qt项目project_gui,project并开始创建GUI,只实现最基本的功能,比如在对话框之间切换,关闭应用程序等等.到目前为止,它对未来的后端()一无所知project_logic.
作为第三个组件,我需要某种控制,它将应用程序的逻辑与GUI相关联.这是我的概念性问题:在一个应用程序中将它们组合在一起的最佳方法是什么?
由于project_logic可以单独作为控制台应用程序工作,因此它已经提供了最重要的控制组件和功能.这将保持这种方式,因为我想保持其独立功能.更是如此,因为我对GUI编程完全不熟悉和/或在两周内我可能碰巧为同一逻辑创建另一个GUI.结果是逻辑部分的类像任何其他头一样包含在GUI源中,并用于创建具有完整功能的程序.验证用户输入将停留在GUI部分上.在任何情况下,程序的逻辑都是可更新的.
使GUI尽可能重用; 我应该实现第三个组件project_controlling,它提供GUI和逻辑之间的交互(通过控制完成的用户输入验证),因为两者中的每一个都尽可能独立吗?GUI不包括逻辑标题,可以这么说,但包括控制标题?
我承认,第二点可能听起来有点奇怪; 简而言之,我的目标是:
project_logic标准C++和独立(在修补,添加功能等方面......)和Qt最大限度地利用GUI(同时合理地)分离GUI和逻辑.我应该project_logic通过#include "../project_logic/header1.h"等包括标题吗?(使用这些类可能有问题,我将在另一个问题中发布.)
我应该将它们作为子项目包括在内吗?
我如何"在代码中"连接部件?
逻辑函数是否仍然找到我之前提到的文件(读/写)?
请记住以下几点:我是GUI编程的新手!我尽我所能来解释我的想法/问题...但是,我知道C和C++并编写控制台应用程序,我用它来进行大学的模拟,并且可以很好地处理标准的东西,我想.即使潜在的回答者想要提出一种非常不同的方法,我也会感谢我提出的概念的"解决方案".我在引言中解释了这个原因.不必提及虽然我当然有兴趣听取不同的建议.
在我做了一些研究之后,我决定发布这个问题,并且之前尝试过"试错"时尚.在StackOverflow和其他主板上有很多关于这个主题的信息,所以我想提出我的想法并收集批评和输入,而不是添加另一个"如何?" 大杂烩的问题.
由于这个问题是关于一般的方法,我可能(非常肯定...... :-P)稍后会提出更多的技术问题,我想在出现这个问题时立即编辑这个问题(超链接).但是,当然,如果有的话,这个问题的基本配方是受欢迎的.
经过一些评论和回答后,我想发布一些编辑只是为了清楚地说明:
project_logic 或多或少地在CodeBlocks中完成并编码为CodeBlocks项目.在Qt项目中,我们通常会找到一个project.pro文件,main.cpp以及几个标题,源和*.ui文件,其中包含将生命和功能注入应用程序/项目的所有资源.如果还有"按下按钮显示'Hello,world!'",则可能存在用于存储数据和配置文件等的目录.
我的问题是(尽管确切的答案取决于具体情况):
main.cpp在Qt项目(Qt Widgets Application)中的一般作用是什么?
说清楚我的意思:
main.cpp开始申请的唯一目的吗?main.cpp什么?main.cpp或在MainForm.简而言之:"设置......"应放在哪里(根据当前的问题)?我正在编写一个类(在头文件myClass.h和实现文件中分开myClass.cpp),我想将它与标准 C++ 和 Qt 框架一起使用。由于代码中的差异非常小(我想尝试一次),我决定#define USINGQT 1通过
#if USINGQT==1
//Qt code
#else
//standard code
#endif
Run Code Online (Sandbox Code Playgroud)
现在我得出的结论是,在“激活”开关时QString在整个班级中使用s 而不是std::strings会很方便USINGQT。但是,上面的方法会使代码变得非常混乱。我的解决方案(在头文件中):
#if USINGQT==1
#include <QString>
#define string QString
#else
#include <string>
#define string std::string
#endif
Run Code Online (Sandbox Code Playgroud)
现在问题来了:
考虑文件的样子
---myclass.h-------------------------
#ifndef MYCLASS_H
#define MYCLASS_H
#define USINGQT 1 //1=on, else off
#if USINGQT==1
#include <QString>
#define string QString
#else
#include <string>
#define string std::string
#endif
namespace mySpace {
class MyClass {
string qtOrStd;
string foo(); …Run Code Online (Sandbox Code Playgroud) 如何在Lua中使用父类和子类构造函数来模拟简单继承?
我将提供、接受和回答,如果您对此发表评论或编辑有趣的信息,我将不胜感激。