PyQT表模型数据绑定

2024-06-06 21:55:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个使用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:

我也测试其他案例。在

案例一:在loadQML之前调用setContextProperty。在

案例二:在loadQML之后调用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。在


Tags: 数据debugimportdataobjecttitledecoratorqml
1条回答
网友
1楼 · 发布于 2024-06-06 21:55:56

我找到了如何让我的代码工作!在

我只是换衣服

qml_app_engine = Qt.QQmlApplicationEngine(
    main_app
)
qml_app_engine.rootContext().setContextProperty(
    "tableModel",
     DummyList()
) # If set property here , raise segementation most time

^{pr2}$

只需更改实例化模型实例的时间,我的代码就行了。在

但任何一位qt专家都能解释为什么这种改变奏效了?在

相关问题 更多 >