情况
我有一个单一的 Qt 模型,特别是一个从 QStringListModel 派生的 StringModel,称为“模型”。
我有三个视图,特别是三个 QListView,分别称为“listView_1”、“listView_2”和“listView_3”。
所有这三个 QListViews 都设置为一个模型,即:
(ui->listView_1)->setModel(model);
(ui->listView_2)->setModel(model);
(ui->listView_3)->setModel(model);
并发症
虽然我希望所有三个视图都引用同一个模型,但它们从该模型显示的数据应该略有不同。模型中规定视图中显示哪些数据的函数是从 QStringListModel 继承的“数据”成员函数,定义为:
QVariant StringModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid()){
return QVariant();
}
if (role == Qt::DisplayRole)
{
int col = index.column();
int row = index.row();
if (col == 0){
QList<Contact*> list = contactList.findChildren<Contact*>();
return list.at(row)->toString();//<<THIS STATEMENT MUST BE VARIABLE
}
}
QVariant v;
return v;
}
上面代码中的第 12 行返回要在视图上显示的数据,这就是我想根据视图改变的返回语句。
问题
模型视图控制器最佳实践表明我们应该能够保持模型不变并通过细微的调整来更改视图。因此,如果不为 3 个视图定义 3 个模型,我将如何调整我的数据函数以根据设置的视图返回不同的语句?或者,用一句话总结,我如何根据设置的视图调整模型?