Python后端发射QStandardItemModel到QML出现undefined对象错误求助
问题原因
PySide2的元对象系统与QML交互时,无法直接识别QStandardItemModel作为信号参数的类型,导致传递到QML端时被解析为undefined,最终触发赋值错误。
修复步骤
- 修改Python端信号定义
将Backend类中sendModel信号的参数类型从QStandardItemModel改为QAbstractItemModel(QML端模型只需要识别QAbstractItemModel接口即可正常工作),修改后代码如下:
class Backend(QObject): model: QStandardItemModel = QStandardItemModel() # 修改信号参数类型为QAbstractItemModel sendModel = Signal(QAbstractItemModel) # 其余代码保持不变
- 补充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
相关产品推荐
相关产品推荐

