小编LCs*_*Csa的帖子

关于分离逻辑(C++)和GUI(Qt)的概念和基本问题

我完成了一个项目C++.它是一个使用CodeBlocks创建的控制台应用程序.虽然我认为在这个问题的范围内并不是那么重要:应用程序管理有关小公司的账单和客户的数据.该程序已经完成,可以通过控制台用户界面轻松扩展(现在,我以程序员的身份运行它).

现在我决定学习使用GUI编程Qt和QtCreator及其QtDesigner!

不仅因为在创建GUI应用程序时将逻辑与GUI分离是一种常见做法,我想将我的项目分为两个重要部分,即逻辑GUI.你已经知道逻辑部分是完整的; 我所拥有的是一个名为project包含另一个文件夹(CodeBlocks项目)的项目文件夹project_logic,它再次包含几个类,因此头文件和实现文件(以及一个主,当然最终会过时).它还包含程序读/写的文件.这是写在"纯" C++,并使用没有提供的手段Qt,这是对我很重要,它保持这种方式!

现在我在-folder中添加了一个Qt项目project_gui,project并开始创建GUI,只实现最基本的功能,比如在对话框之间切换,关闭应用程序等等.到目前为止,它对未来的后端()一无所知project_logic.

作为第三个组件,我需要某种控制,它将应用程序的逻辑与GUI相关联.这是我的概念性问题:在一个应用程序中将它们组合在一起的最佳方法是什么?

建议

  1. 由于project_logic可以单独作为控制台应用程序工作,因此它已经提供了最重要的控制组件和功能.这将保持这种方式,因为我想保持其独立功能.更是如此,因为我对GUI编程完全不熟悉和/或在两周内我可能碰巧为同一逻辑创建另一个GUI.结果是逻辑部分的类像任何其他头一样包含在GUI源中,并用于创建具有完整功能的程序.验证用户输入将停留在GUI部分上.在任何情况下,程序的逻辑都是可更新的.

  2. 使GUI尽可能重用; 我应该实现第三个组件project_controlling,它提供GUI和逻辑之间的交互(通过控制完成的用户输入验证),因为两者中的每一个都尽可能独立吗?GUI不包括逻辑标题,可以这么说,但包括控制标题?


我承认,第二点可能听起来有点奇怪; 简而言之,我的目标是:

  • 保持project_logic标准C++独立(在修补,添加功能等方面......)和
  • Qt最大限度地利用GUI(同时合理地)分离GUI和逻辑.

思路

  1. 我应该project_logic通过#include "../project_logic/header1.h"等包括标题吗?(使用这些类可能有问题,我将在另一个问题中发布.)

  2. 我应该将它们作为子项目包括在内吗?

  3. 我如何"在代码中"连接部件?

  4. 逻辑函数是否仍然找到我之前提到的文件(读/写)?


请记住以下几点:我是GUI编程的新手!我尽我所能来解释我的想法/问题...但是,我知道C和C++并编写控制台应用程序,我用它来进行大学的模拟,并且可以很好地处理标准的东西,我想.即使潜在的回答者想要提出一种非常不同的方法,我也会感谢我提出的概念的"解决方案".我在引言中解释了这个原因.不必提及虽然我当然有兴趣听取不同的建议.

在我做了一些研究之后,我决定发布这个问题,并且之前尝试过"试错"时尚.在StackOverflow和其他主板上有很多关于这个主题的信息,所以我想提出我的想法并收集批评和输入,而不是添加另一个"如何?" 大杂烩的问题.

由于这个问题是关于一般的方法,我可能(非常肯定...... :-P)稍后会提出更多的技术问题,我想在出现这个问题时立即编辑这个问题(超链接).但是,当然,如果有的话,这个问题的基本配方是受欢迎的.


经过一些评论和回答后,我想发布一些编辑只是为了清楚地说明:

逻辑的当前状态

  • project_logic 或多或少地在CodeBlocks中完成并编码为CodeBlocks项目.
  • 可以 …

c++ user-interface qt conceptual separation-of-concerns

15
推荐指数
1
解决办法
3451
查看次数

'main.cpp'在Qt项目中的作用

在Qt项目中,我们通常会找到一个project.pro文件,main.cpp以及几个标题,源和*.ui文件,其中包含将生命和功能注入应用程序/项目的所有资源.如果还有"按下按钮显示'Hello,world!'",则可能存在用于存储数据和配置文件等的目录.

我的问题是(尽管确切的答案取决于具体情况):

main.cpp在Qt项目(Qt Widgets Application)中的一般作用是什么?


说清楚我的意思:

  1. main.cpp开始申请的唯一目的吗?
  2. 如果没有,那么典型的任务是main.cpp什么?
  3. 说到配置文件 - 考虑应用程序有一个主窗体,它可以(也可能是由主窗体实例化的其他类/对话框)来了解从文件中检索的一些配置数据.初始化是发生在main.cpp或在MainForm.简而言之:"设置......"应放在哪里(根据当前的问题)?
  4. 无论你想说什么......

c++ qt

3
推荐指数
1
解决办法
2713
查看次数

正确在 C++ 头文件/实现文件中放置 #undef 指令

我正在编写一个类(在头文件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)

c++ c-preprocessor

1
推荐指数
1
解决办法
1431
查看次数

如何在 Lua 中使用基类和子类构造函数来模拟简单继承(教程)

如何在Lua中使用父类和子类构造函数来模拟简单继承?

我将提供、接受和回答,如果您对此发表评论或编辑有趣的信息,我将不胜感激。

oop inheritance lua

0
推荐指数
1
解决办法
1388
查看次数