You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python后端发射QStandardItemModel到QML出现undefined对象错误求助

问题原因

PySide2的元对象系统与QML交互时,无法直接识别QStandardItemModel作为信号参数的类型,导致传递到QML端时被解析为undefined,最终触发赋值错误。

修复步骤

  1. 修改Python端信号定义
    将Backend类中sendModel信号的参数类型从QStandardItemModel改为QAbstractItemModel(QML端模型只需要识别QAbstractItemModel接口即可正常工作),修改后代码如下:
class Backend(QObject):
    model: QStandardItemModel = QStandardItemModel()
    # 修改信号参数类型为QAbstractItemModel
    sendModel = Signal(QAbstractItemModel)

    # 其余代码保持不变
  1. 补充TreeView列定义(可选,避免模型正常但看不到内容)
    你当前的QML中TreeView没有配置列,就算模型传递成功也不会显示内容,可在TreeView块中添加列配置:
TreeView {
    id: treeView
    model: mainWindow.myModel
    anchors.fill: parent
    TableViewColumn {
        title: "测试列"
        role: "display"
        width: 300
    }
}

补充说明

如果想要直接从槽函数返回模型,只需要把@Slot的result参数指定为QAbstractItemModel即可,不需要通过信号传递:

# 槽函数定义
@Slot(result=QAbstractItemModel)
def get_model(self):
    self.model = QStandardItemModel()
    self.model.appendRow(QStandardItem('TEST ITEM'))
    return self.model

QML端直接调用即可:

onClicked: {
    treeView.model = backend.get_model()
}

修改后重新运行即可正常传递和显示模型。

内容的提问来源于stack exchange,提问作者adouv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 16:54:02