Qt模型/视图架构 - 如何处理更复杂的模型

时间:2012-11-17 21:49:51

标签: qt model

Qt中的模型是否应该或多或少地适合模具 - 因此最终由列表,表格或树表示?如果您的模型更复杂且无法用列表,表格或树表示,该怎么办?

如果是这种情况,我认为这会使模型成为数据;与XML文件或电子表格相当的东西。

示例:如果相关应用程序中的模型更复杂,如汽车,该怎么办?我认为汽车的模型将包括有关汽车的所有类型的数据和业务规则。会有一个发动机,车轮,一个车架和许多其他不同的部件,它们共同作用来制造整辆车。每个组件都有自己独特的行为:框架将具有颜色,引擎将具有温度,立体声将具有音量设置,等等。并且每个部件也会有行为:如果踩下油门踏板,车轮会旋转并且发动机会加热。显然,QStringListModel或其他一些内置的简化模型无法恰当地解决汽车中的所有复杂问题。

2 个答案:

答案 0 :(得分:2)

模型不是数据,而是一组回调。实际上,不需要将真实数据留在模型后面。它更像是要查询的服务器。

这就像是:

之间的区别
int data[5] = { 0, 2, 4, 6, 8 };
void viewer(int *data, int n) {
    for (int ii = 0; ii < n; ii++)
        printf("%d, ", data[ii]);
}
int main() {
    viewer(data, 5);
}

而且:

int model(int index) {
    return index * 2;
}
typedef int (*model_function)(int);
void viewer(model_function model, int n) {
    for (int ii = 0; ii < n; ii++)
        printf("%d, ", model(ii));
}
int main() {
    viewer(model, 5);
}

两者都会给你0, 2, 4, 6, 8,但模型实际上并不需要一个数组来给出相同的值。

答案 1 :(得分:1)

尝试在这里阅读Qt中的MV:similar question on SO,当然还有Model/View Programming at http://qt-project.org/等资源。此外,VoidRealms还有很多有趣的视频,包括这个主题 - VoidRealms: C++ Qt 47 - Intro to model view programming

尝试一般地理解它,特别是在Qt中它是如何理解的,所有问题和你的误解都会消失。