gpt4 book ai didi

python - 如何在 PySide2 中将 python 列表转换为 QVariantList

转载 作者:行者123 更新时间:2023-11-28 16:57:57 26 4
gpt4 key购买 nike

因此,PySide2 删除了 QVariant* 类型。

但是,QtQuick 公开了大量的 QVariant API。

更具体地说,我想使用非常方便的功能将 QVariantList 作为 ListView 的模型传递,而无需实现完全成熟的 QAIM。

但是,通过 setContextProperty 将这样的对象提供给 QML

class Test(QObject):
def __init__(self):

super(Test, self).__init__()
self.propertyList = ["FOO", "BAR", 1]

def model(self):
return self.propertyList

modelChanged = Signal()
model = Property(list, model, notify=modelChanged)

然后打印 .model 产量:

qml: QVariant(PySide::PyObjectWrapper)

那么如何将 python 列表以 qml 实际理解的形式传递给 qml?

最佳答案

您必须将属性类型传递给 "QVariantList":

from PySide2 import QtCore, QtGui, QtQml


class Test(QtCore.QObject):
modelChanged = QtCore.Signal()

def __init__(self, parent=None):
super(Test, self).__init__(parent)
self.propertyList = ["FOO", "BAR", 1]

def model(self):
return self.propertyList

model = QtCore.Property("QVariantList", fget=model, notify=modelChanged)


if __name__ == "__main__":
import sys

app = QtGui.QGuiApplication(sys.argv)

pyobject = Test()

engine = QtQml.QQmlApplicationEngine()
ctx = engine.rootContext()
ctx.setContextProperty("pyobject", pyobject)
engine.load(QtCore.QUrl.fromLocalFile("main.qml"))
engine.quit.connect(app.quit)

sys.exit(app.exec_())
import QtQuick 2.12
import QtQuick.Window 2.12

Window{
visible: true
width: 640
height: 480

Component.onCompleted: console.log(pyobject.model)
}

输出:

qml: [FOO,BAR,1]

<子>注意:在 PyQt5 的情况下,python 的 native 列表直接转换为 QML 列表,与 PySide2 不同,您必须指示 Qt 的类型,如果它们不直接作为类型存在,则必须将其指示为字符串。

关于python - 如何在 PySide2 中将 python 列表转换为 QVariantList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56587431/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com