J'ai une classe modèle qui hérite QAbstractListModel
:données modèle Accès Qt en dehors ItemDelegate
VehiclesModel.h
:
class VehiclesModel : public QAbstractListModel {
Q_OBJECT
public:
enum Roles {
ImagePathRole = Qt::UserRole + 1, // QString
NameRole // QString
};
virtual int rowCount(const QModelIndex & parent = QModelIndex()) const override { ... }
virtual QVariant data(const QModelIndex & index, int role) const override { ... }
virtual QHash<int, QByteArray> roleNames() const override {
QHash<int, QByteArray> roles = QAbstractListModel::roleNames();
roles[ImagePathRole] = "imagePath";
roles[NameRole] = "name";
return roles;
}
};
main.cpp
:
#include "VehiclesModel.h"
int main(int argc, char * argv[]) {
QGuiApplication app(argc, argv);
VehiclesModel vehiclesModel;
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("vehiclesModel", &vehiclesModel);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
Et ComboBox
qui affiche ce modèle: main.qml
:
ComboBox {
id: control
model: vehiclesModel
delegate: ItemDelegate {
contentItem: RowLayout {
Image {
source: imagePath
}
Label {
text: name
}
}
highlighted: control.highlightedIndex == index
}
contentItem: RowLayout {
Image {
source: ??imagePath??
}
Label {
text: ??name??
}
}
}
Je veux personnaliser le ComboBox
pour afficher l'image et le nom du véhicule. Je peux accéder aux données de modèle de ItemDelegate
mais comment accéder aux données de modèle en dehors du ItemDelegate
? Par exemple, je souhaite accéder aux données d'index actuelles (ImagePathRole
et NameRole
) pour afficher l'image et le nom du véhicule au contentItem
.
Est-il possible de le faire sans appeler directement les méthodes QAbstractListModel
(à savoir les méthodes et index()
data()
) et de les rendre Q_INVOKABLE
?
Comment est-ce "exactement ce que OP recherche"? Pouvez-vous l'expliquer dans votre réponse?Que voulez-vous dire par "syntaxe facile et agréable avec un minimum de frais généraux d'écriture de vos setters/getters"? Comment cela est-il pertinent à la question? Je ne vois pas non plus le point de votre dernière phrase (les Q_PROPERTY sont utilisés pour définir les rôles du modèle, pour ne pas pouvoir accéder au modèle en QML) – GrecKo
Voir la mise à jour de la réponse. – Bartel
Merci de mettre à jour votre réponse et de montrer comment la bibliothèque peut être utilisée. Mes questions restent toujours sans réponse, attendues les 2 premières. Par syntaxe facile et sympa, je crois que vous parlez de son qt-supermacros lib, ce qui n'est pas clair que vous utilisez dans votre réponse. Votre phrase sur Q_PROPERTY n'est toujours pas claire et plutôt vague. – GrecKo