我有一个使用TableView显示内容的QML,我需要将python代码中的数据动态注入qt-QML表。在
QML以下:
import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Window 2.2
import QtQuick.Dialogs 1.2
ApplicationWindow {
//property var tableModel
title: qsTr("Hello World")
width: 640
height: 480
TableView {
model: tableModel
anchors.fill: parent
Component.onCompleted: console.log(tableModel)
TableViewColumn {
width:200
role: "hello_would"
title: "Hello Would"
}
TableViewColumn {
width:200
role: "foobar"
title: "Foobar"
}
TableViewColumn {
width:200
role: "zebra"
title: "Zebra"
}
TableViewColumn {
width:200
role: "ummmm"
title: "Ummmm"
}
}
}
所以我尝试实现QtAbstractTableModel,这是我的实现。在
^{pr2}$但它不起作用,只显示带有标题的空表。在
有人知道我错了吗?在
更新日期:2015/04/06:
我也测试其他案例。在
案例一:在load
QML之前调用setContextProperty
。在
案例二:在load
QML之后调用setContextProperty
。在
案例三:不要使用QMlApplicationEngine
,直接使用MyWindow
来显示数据。在
在第一种情况下,这可能导致两种结果。在
结果1:报告分割错误:11,系统退出。在
结果2:显示带标题的空表。QtAbstractTableModel
未调用。Component.onCompleted: console.log(tableModel)
打印空值
在第二种情况下,调用了QtAbstractTableModel
中的所有函数。Component.onCompleted: console.log(tableModel)
不调用。
但桌子还是空的。在
我的控制台输出在下面列出的案例二中,seen数据方法已经被调用并且工作正常。在
2015-04-05 16:58:49,244 DEBUG decorator:24 data args : (<app.models.dummy.DummyList object at 0x1094680d8>, <PyQt5.QtCore.QModelIndex object at 0x109470438>, 7) , kwargs : {}
2015-04-05 16:58:49,244 DEBUG decorator:26 data result : Foobar - P1
2015-04-05 16:58:49,244 DEBUG decorator:24 data args : (<app.models.dummy.DummyList object at 0x1094680d8>, <PyQt5.QtCore.QModelIndex object at 0x109470438>, 8) , kwargs : {}
2015-04-05 16:58:49,244 DEBUG decorator:26 data result : Zebra - P1
2015-04-05 16:58:49,245 DEBUG decorator:24 data args : (<app.models.dummy.DummyList object at 0x1094680d8>, <PyQt5.QtCore.QModelIndex object at 0x109470438>, 9) , kwargs : {}
2015-04-05 16:58:49,245 DEBUG decorator:26 data result : Ummmm - P1
例三:全部工作,正确显示数据。但我必须使用QML而不是手动创建widget。在
我找到了如何让我的代码工作!在
我只是换衣服
到
^{pr2}$只需更改实例化模型实例的时间,我的代码就行了。在
但任何一位qt专家都能解释为什么这种改变奏效了?在
相关问题 更多 >
编程相关推荐