4

Qt 中的模型是否应该或多或少地适应模型——因此最终由列表、表格或树来表示?如果您的模型要复杂得多并且不能用列表、表格或树表示怎么办?

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

示例:如果所讨论的应用程序中的模型是更复杂的东西,比如汽车怎么办?我会假设汽车的模型将包括关于汽车的所有类型的数据和业务规则。将有一个引擎、车轮、一个框架和许多其他不同的组件,它们都一起工作来创造整个汽车。每个组件都有自己独特的一组行为:框架有颜色,引擎有温度,立体声有音量设置,等等。每个组件也会有行为:如果踩下油门踏板,车轮就会转动,发动机就会升温。显然,一个QStringListModel或其他一些内置的简化模型不能适当地解决汽车中的所有复杂性。

4

2 回答 2

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,但模型实际上并不需要一个数组来提供相同的值。

于 2012-11-18T18:28:54.090 回答
1

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

尝试从总体上理解它,尤其是在特定情况下——它在 Qt 中的情况,所有的问题和你的误解都会消失。

于 2012-11-18T16:32:15.213 回答