Kak*_*adu 5 qt porting models qml qt5
今天我想和QtQuick2一起玩一点.所以我开始将非常简单的Qt Quick1应用程序移植到Quick2.这个应用程序使用一些模型 在Qt5中,模型无法正常工作:我无法使用角色访问数据.
这是我的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);
}
}
Run Code Online (Sandbox Code Playgroud)
在Qt4.8中,我能够使用roleName
语法获取数据(在此QML中我的roleName = homm
)但在Qt5中我不能.那是在控制台中写的:
MainModel(0x7fff08beff80)
homm,wtf
QQuickVDMAbstractItemModelData(0x23c96e0)
undefined
file:///media/disk/kakadu/prog/qt/quick2test/qml/quick2test/main.qml:20: ReferenceError: homm is not defined
Run Code Online (Sandbox Code Playgroud)
这就是Quick 1.1
MainModel(0x7fffe58182f0)
undefined
QDeclarativeVisualDataModelData(0x2372ea0)
QVariant(MiniModel*)
QVariant(MiniModel*)
Run Code Online (Sandbox Code Playgroud)
您可以看到使用角色访问数据按预期工作.我为您创建了测试应用程序: Qt5和Qt 4.8.我希望你能帮助我找到物质的核心.
PS我在Qt5版本上做了一些改动.在Qt5中,方法setRoleNames()
已过时,roleNames()
建议覆盖.我做了这个压倒一切.
PPS我的代码示例应该可以在GNU/Linux x64上编译
我在你的代码中发现了一个错误。roleNames()
是常数法。这是一行有效的代码:
virtual QHash<int, QByteArray> roleNames() const { return _roles; }
Run Code Online (Sandbox Code Playgroud)
还有一个工作示例:examples/quick/modelviews/abstractitemmodel。
归档时间: |
|
查看次数: |
3163 次 |
最近记录: |