下面的代码工作正确,我可以在QML文件中获得my_model属性。
if __name__ == '__main__':
app = QGuiApplication(sys.argv)
engine = QQmlApplicationEngine()
context = engine.rootContext()
context.setContextProperty('my_model', MyModel())
engine.load('path/to/main.qml')
sys.exit(app.exec_())但是,当我试图将my_model移动到另一个函数时,QML文件中的setContextProperty是空的。例如:
def boot_model(context):
context.setContextProperty('my_model', MyModel())
if __name__ == '__main__':
app = QGuiApplication(sys.argv)
engine = QQmlApplicationEngine()
context = engine.rootContext()
boot_model(context)
engine.load('path/to/main.qml')
sys.exit(app.exec_())在本例中,my_model将在我的QML文件中为空:
ApplicationWindow {
id: root
Button {
onClicked: {
console.log(my_model) // Output: qml: null
}
}
}当我试图创建QOject工厂时,我发现了这个问题。
我做错了什么?
发布于 2019-12-30 20:56:46
解释:
问题是,MyModel()是一个局部变量,在boot_model函数完成执行时将被删除。根据我的经验,根据PyQt5或PySide2的使用,我希望有2种行为,在第一种情况下,我希望它表示null,而在第二种情况下,我希望会出现分段错误(核心转储)。
解决方案:
解决方案是扩展MyModel()类对象的范围,为此有几种解决方案:
def boot_model(context):
model = MyModel()
model.setParent(context)
context.setContextProperty("my_model", model)def boot_model(context):
model = MyModel()
context.model = model
context.setContextProperty("my_model", model)https://stackoverflow.com/questions/59536562
复制相似问题