c++ - 将 Qt 模型/ View 与非表格数据和非表格/列表 UI 一起使用?

标签 c++ model-view-controller qt

我一直在阅读 Qt 的模型/ View 框架。我发现它对处理表格数据(如数据库中的表格)非常有帮助。我的问题是:它对非表格数据(如属性列表)或只是一些各种类型的数据有用吗?如果是这样,我应该如何处理它?<​​/p>

目标是为某些属性列表(如数据)设计一个编辑器。该列表是在运行时构建的,元素有多种类型(数字、字符串、 bool 值和文件路径,仅举几例)。每个元素基本上都是一个名称-值对。每个元素的名称、类型和限制(例如限制)在编译时定义。它们将在运行时根据用户输入组装成不同的列表。并且元素列表可以在编辑 session 期间更改。

UI 很可能是根据用户输入组装的各种预先设计的小部件的组合。它们可能不是列表或表格 View 。

一些指向设计模式或示例的指针也非常受欢迎。谢谢。

最佳答案

我没有发现 QT 中的 MVC 框架有问题。

基本上,标准表格显示与此之间的区别在于您动态创建类似于 map 的列表:

QMap<QString, QVariant> property_map;

你可以这样做:

QList<std::pair<QString, QVariant>> property_list;

然后您可以使用它在表格中显示属性。最好的方法可能是:

struct {
   QString prop_name;
   int prop_type;
   QVariant prop_value;
};

QVariant基本上将为您提供一个用于数据存储的抽象类,它实际上是 QAbstractItemModel 中的 data() 函数返回的内容,您可能会重新实现它。

所以基本上你会获取一个属性列表并将其归结为与数据库相同的数据表。

修改

如果您有一个 Widget,并且您希望用其他预定义的 widget 填充此 widget,您很可能会遇到多个问题,除非 widget 具有相同或明确​​定义的大小。

您可以做的是在您的 Display 小部件中定义一个布局,例如:QGridLayout或其他可能的布局,然后使用一些参数集将您的其他小部件添加到其中,这可以完成,但可能会有些痛苦。

您可能采取的另一种方法是将所有属性小部件放在显示 UI 的最前面,然后只需打开您需要的那些,然后关闭其余的,但这仅适用于您有明确定义的有限数量的预置设计的小部件。

关于c++ - 将 Qt 模型/ View 与非表格数据和非表格/列表 UI 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9686642/

相关文章:

javascript - 正确地将 JavaScript 添加到 Razor 页面

c++ - Qt跨线程调用

c++ - 如何将 QImage 转换为 QByteArray?

c++ - C++ STL map 如何管理内存,以及如何绕过它

c++ - 在隐式障碍处等待 OpenMP 任务完成?

c++ - 关于封装和继承实践的问题

javascript - JQuery数据表土耳其语字符搜索问题

c++ - 查找硬件中正在使用哪个中断驱动程序的命令是什么?

iOS模型类案例分析

c++ - 如果该分隔符包含在方括号中,我如何通过分隔符拆分 QString 而不是