Qt 5.7、Quick Controls 2.0 では、スレーブ ListView を持つマスター ComboBox があります。ユーザーが ComboBox の選択を変更すると、スレーブはどのように変更されますか?
例えば:
人のリストがあり、すべての人が車のリストを持っていると想像してください。
- Person1 - car1、car2、car3
- Person2 - car4
- Person3 - car5、car6、car7、car8
- Person4 - car9、car10 ...
人物は ComboBox に表示される必要があり、ユーザーが人物を選択すると、Listview は人物の車を表示する必要があります。
これを試してみましたが、carsRole がデータ メンバーで呼び出されることはないため、ListView には何も表示されません。
QML:
ComboBox {
textRole: "name"
model: personsModel
}
ListView {
model: personsModel.cars
}
C++
enum PersonsRoles {
nameRole = Qt::UserRole + 1,
carsRole
};
QVariant PersonsModel::data(const QModelIndex &index, int role) const
{
int row = index.row();
if ((row < 0) || (row >= _persons.size())) {
return QVariant();
}
switch (role) {
case nameRole:
return _persons.at(row);
case carsRole: {
return QVariant::fromValue(new CarsModel(row));
}
}
return QVariant();
}
QHash<int, QByteArray> PersonsModel::roleNames() const
{
QHash<int, QByteArray> roles;
roles[nameRole] = "name";
roles[carsRole] = "cars";
return roles;
}