1

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;
}
4

1 に答える 1