如何组织更大的多类 GUI 项目
How to organise bigger multi-class GUI projects?
我做了一个控制台应用程序来做一些事情。它看起来像:
class C
{
public:
void print()
{
print("something that only class C knows");
}
}
//**************************************
class B
{
public:
void print()
{
print("something that only class B knows");
for_each(C c)
{
c.print();
}
}
private:
std::vector<C> c_classes;
}
//**************************************
class A
{
public:
void print()
{
print("something that only class A knows");
for_each(B b)
{
b.print();
}
}
private:
std::vector<B> b_classes;
}
并且在控制台中工作得很好,我可以从任何地方打印。
当我想将此应用程序移植到 GUI 时出现问题。我需要展示 A、B 和 C 类所知道的一切。最好的方法是什么?
我想让类 A 返回对类 B 向量的引用(它返回对类 C 向量的引用)并从 GUI 类中的每个实例中获取值。
但我不想让 GUI 类如此依赖于这些类。
有没有更好的方法可以做到这一点?
创建一个具有纯虚拟print()
方法(可能返回字符串)的公共接口Printable
,并在某处具有指向此对象的指针向量。将类A
、B
和C
派生自Printable
。因此,当您要打印每个对象的统计信息时,只需遍历此向量并显示输出即可。
从类层次结构中获取数据的一种好方法是使用访问者设计模式。 这样,将遍历层次结构(类似于您现在拥有的层次结构),并生成可供 GUI 使用的结果。 这个结果可以是一个 std::map,对象名称作为键,打印的字符串作为值;GUI 可以使用此映射来制作其表。
缺点是访问者最初会产生一些额外的复杂性,希望以后会得到回报。
其他答案的替代方法是实现一个"to_string()"成员,该成员存在于每个类中并返回一个包含相关数据的字符串(例如,这是所有 Java 程序中完成的方式)。
或者,您可以重载特定类的 ostream <<运算符。网上应该有很多描述如何做到这一点的例子。
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法在 CLion 中构建 C++ 项目
- 运行同一解决方案的另一个项目的项目
- 如何从 Linux 控制台使用 CMake 构建 Eclipse C++ 项目(没有可用的 GUI)
- 您将如何在现有的QT Creator GUI项目中实现ROS发布者和订阅者?
- 如何使用.UI文件在QT Creator中使用CMAKE制作GUI QT项目
- 使用 Arduino 将 GUI 添加到 QT 项目中
- 如何使用GUI将外部库和项目导入到我的C++项目中
- Qt Creator在创建新项目时没有"Qt Gui Application"可供选择
- QT gui 项目不会缩小到 ft 到它们的父小部件
- 如何组织更大的多类 GUI 项目
- 如何使用命令行 qmake 创建 Qt GUI 或 QML/Qt 快速项目
- 使用 Qt 插件在 Eclipse 中的 Qt GUI 项目
- 在GUI中创建非常大的树状视图(超过1M个项目)
- 在C++项目中使用C#GUI
- 在c# GUI项目上重定向标准输出+标准错误
- 将gui添加到c++项目中(visualstudio2010)
- 我正在使用Qt GUI c++进行POS系统项目
- 用户界面-我的项目需要GUI,它有用C++(GNU)编写的代码,并涉及hash_map数据结构
- Eclipse CDT/Qt:有一个Qt Gui项目依赖于工作空间中的另一个c++项目