Dzisiaj chciałem trochę zagrać z QtQuick2. Tak więc zacząłem przenosić bardzo prostą aplikację Qt Quick1 do Quick2. Ta aplikacja używa niektórych modeli. A w Qt5 modele nie działają tak jak oczekuję: nie mogę uzyskać dostępu do danych za pomocą ról.Modele i role w Qt5 i Qt 4.8
To jest mój kod QML:
import QtQuick 2.0
Rectangle {
width: 800
height: 360
ListView {
model: mainModel
spacing: 5
anchors.fill: parent
orientation: ListView.Vertical
delegate: Text {
text: "1"
Component.onCompleted: {
console.log(mainModel);
console.log(mainModel.roles());
console.log(model);
console.log(model.homm); // `homm` is my roleName
console.log(homm);
}
}
W Qt4.8 I był w stanie uzyskać dane za pomocą roleName
składni (w tym QML mój RoleName = homm
), ale w Qt5 nie mogę. To, co jest napisane w konsoli:
MainModel(0x7fff08beff80)
homm,wtf
QQuickVDMAbstractItemModelData(0x23c96e0)
undefined
file:///media/disk/kakadu/prog/qt/quick2test/qml/quick2test/main.qml:20: ReferenceError: homm is not defined
I to do szybkiego 1,1
MainModel(0x7fffe58182f0)
undefined
QDeclarativeVisualDataModelData(0x2372ea0)
QVariant(MiniModel*)
QVariant(MiniModel*)
Jak widać dostępu do danych za pomocą ról działa zgodnie z oczekiwaniami. Stworzyłem dla Ciebie aplikacje testowe: for Qt5 i for Qt 4.8. Mam nadzieję, że pomożesz mi znaleźć serce materii.
P.S. Wprowadziłem pewne zmiany w wersji Qt5. W Qt5 metoda setRoleNames()
jest przestarzała i zaleca się nadpisanie wartości roleNames()
. Zrobiłem to przeważając.
P.P.S. Przykład mojego kodu powinien być kompilowany na GNU/Linux x64
Twój kod Qt5 nie jest kompilowany. –
trollixx, Jeśli mówisz o ''MiniModel': inicjalizacja nielegalnego członka' Nie wiedział tego. Zostałem przetestowany na systemie GNU/Linux x64. Potrzebuję trochę czasu, aby zbadać, co jest nie tak w kompilatorze MSVC. – Kakadu
Ubuntu Linux x86_64, g ++ 4.6.3. –