Ste*_*Chu 9 c++ model-view-controller qt
我一直在阅读Qt的Model/View框架.我发现使用像数据库中的表这样的表数据非常有用.我的问题是:对于非表格数据,如属性列表或只是一些不同类型的数据,它会有用吗?如果是这样,我应该如何处理它?
目标是为数据等属性列表提供编辑器.该列表在运行时构造,并且元素具有各种类型(数字,字符串,布尔值和文件路径,仅举几例).每个元素基本上都是一个名称 - 值对.在编译时定义每个元素的名称,类型和约束(例如限制).根据用户输入,它们将在运行时组装到不同的列表中.元素列表可以在编辑会话期间更改.
UI很可能是根据用户输入组装的各种预先设计的小部件的组合.它们可能不是列表或表视图.
一些指向设计模式或示例的指针也非常受欢迎.谢谢.
我认为 QT 中的 MVC 框架这样做没有问题。
基本上,标准表格显示与此表格显示之间的区别在于,您动态创建类似于以下地图的列表:
QMap<QString, QVariant> property_map;
Run Code Online (Sandbox Code Playgroud)
你可以做:
QList<std::pair<QString, QVariant>> property_list;
Run Code Online (Sandbox Code Playgroud)
然后您可以使用它在表中显示该属性。最好的方法可能是:
struct {
QString prop_name;
int prop_type;
QVariant prop_value;
};
Run Code Online (Sandbox Code Playgroud)
QVariant基本上将为您提供一个用于数据存储的抽象类,它实际上是您可能要重新实现的data()函数内部返回的内容QAbstractItemModel。
因此,基本上,您将获取一个属性列表,并将其归结为与数据库相同的表(如数据)。
修正
如果您有一个小部件,并且希望该小部件填充有其他预定义的小部件,则很可能会遇到多个问题,除非小部件具有相同或定义良好的大小。
您可以做的是在显示小部件中定义一个布局,例如:QGridLayout或其他可能的布局,然后使用一组参数将其他小部件添加到其中,这可以完成,但可能有点痛苦。
您可以采取的另一种方法是将所有属性小部件放在显示 UI 的前面,然后只需打开您需要的部件,然后关闭其余部件,但这仅适用于您有明确定义的有限数量的预先设计的小部件。