Auf Qt 5.7, Quick Controls 2.0, habe ich eine Master-ComboBox mit einem Slave-ListView. Wie kann sich der Slave ändern, wenn der Benutzer die ComboBox-Auswahl ändert?QML/C++ Master/Detail ComboBox/Listview
Für exemple:
Stellen Sie sich vor, dass ich eine Liste von Personen haben, und jede Person hat eine Liste von Autos:
- Person1 - car1, car2, car3
- Person2 - car4
- Person3 - car5, car6, car7, car8
- Person4 - car9, car10 ...
Die Personen müssen auf der ComboBox angezeigt werden, und wenn der Benutzer eine Person auswählt, muss die Listview die Autos der Person anzeigen.
Ich habe das versucht, aber die CarsRole wird nie Daten Mitglied aufgerufen, so dass die ListView nichts zeigt.
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;
}