QML/C++;主/细节组合框/列表视图

QML/C++;主/细节组合框/列表视图,qml,qtquick2,master-detail,qtquickcontrols2,Qml,Qtquick2,Master Detail,Qtquickcontrols2,在Qt5.7的QuickControls2.0上,我有一个带有从属ListView的主组合框。当用户更改组合框选择时,从机如何更改 例如: 想象一下,我有一份人员名单,每个人都有一份汽车名单: 人1-车1,车2,车3 人2-车4 人员3-car5、car6、car7、car8 人4-车9,车10 人员必须出现在组合框上,当用户选择人员时,列表视图必须显示人员的车辆 我已经尝试过了,但是从未对数据成员调用carsRole,所以ListView没有显示任何内容 QML: C++ 枚举个人角色{

在Qt5.7的QuickControls2.0上,我有一个带有从属ListView的主组合框。当用户更改组合框选择时,从机如何更改

例如:

想象一下,我有一份人员名单,每个人都有一份汽车名单:

  • 人1-车1,车2,车3
  • 人2-车4
  • 人员3-car5、car6、car7、car8
  • 人4-车9,车10
人员必须出现在组合框上,当用户选择人员时,列表视图必须显示人员的车辆

我已经尝试过了,但是从未对数据成员调用carsRole,所以ListView没有显示任何内容

QML:

C++

枚举个人角色{
nameRole=Qt::UserRole+1,
卡斯罗
};
QVariant personmodel::数据(常量QModelIndex&index,int角色)常量
{
int row=index.row();
如果((行<0)| |(行>=_persons.size())){
返回QVariant();
}
交换机(角色){
案例名称角色:
返回(世界其他地区);
案例角色:{
返回QVariant::fromValue(新的CarsModel(行));
}
}
返回QVariant();
}
QHash PersonModel::roleNames()常量
{
QHash角色;
角色[名称角色]=“名称”;
角色[carsRole]=“汽车”;
返回角色;
}

如果将角色枚举公开给QML,则可以调用,该调用标记为自Qt 5.5起:

C++:

QML:

如果
PersonModel
已经注册为QML类型,并且您在QML中创建了实例,那么这将已经起作用。如果
personmodel
是上下文属性,则必须将
personmodel
注册到QML,例如:

qmlRegisterUncreatableType("foo.bar", 1, 0, "PersonsModel", "PersonsModel is a context property"):

然后在QML中导入foo.bar 1.0。

如果将角色枚举公开给QML,则可以调用,标记为自Qt 5.5起:

C++:

QML:

如果
PersonModel
已经注册为QML类型,并且您在QML中创建了实例,那么这将已经起作用。如果
personmodel
是上下文属性,则必须将
personmodel
注册到QML,例如:

qmlRegisterUncreatableType("foo.bar", 1, 0, "PersonsModel", "PersonsModel is a context property"):
然后在QML中导入foo.bar 1.0

enum PersonsRoles {
    nameRole = Qt::UserRole + 1,
    carsRole
};
Q_ENUM(PersonsRoles)
ComboBox {
    id: comboBox
    textRole: "name"
    model: personsModel
}

ListView {
    model: personsModel.data(personsModel.index(comboBox.currentIndex, 0), PersonsModel.carsRole)
}
qmlRegisterUncreatableType("foo.bar", 1, 0, "PersonsModel", "PersonsModel is a context property"):