ef 在此上下文中只支援基本型別或列舉型別_關於Qt for python中對QML支援的改進...
阿新 • • 發佈:2020-12-24
自Qt5中增加PySide以來(又名PySide2),伴隨著QML的普及,增強其與QML的互動功能越發受到官方重視。
在5.12的第一個官方發行版中,雖然重寫了許多QML和Python互動的用例,但還是遺漏了一些常用的用例。這將在對Qt6進行的開發新的特性和改進中得到解決。在這裡,您可以找到到目前為止計劃中的Qt for Python 6.0發行版所做的特性的摘要。
不再對自定義型別進行數量限制
以前最多註冊50種自定義型別的限制在6.0中消失了,現在你可以註冊任意多的型別。
支援單例類
從6.0開始,可以使用qmlRegisterSingletonType註冊在QML中使用的定製單例。如果您想要向QML公開作業系統的資訊,您可以建立以下類:
class SystemInfo(QObject): def __init__(self): QObject.__init__(self) def getOSName(self): return platform.system() def getOSRelease(self): return platform.release() osName = Property(str, getOSName) osRelease = Property(str, getOSRelease)
然後在CustomType中註冊它:
qmlRegisterSingletonType(SystemInfo,"CustomType", 1,0,"SystemInfo")
現在,您只需在QML程式碼中匯入CustomType即可訪問SystemInfo:
import CustomType 1.0Text { text: "OS Name: " + SystemInfo.osName}
增加非例項化型別支援
通過qmlRegisterUncreatableType向QML註冊不可被建立的型別。可以這樣使用它,例如 在QML中註冊自定義列舉(利用新的QEnum註釋):
class Theme(QObject): @QEnum class Variant(Enum): Default, Dark, HighContrast = range(3)# ...qmlRegisterUncreatableType(Theme, "CustomType", 1, 0, "Theme", "Theme can't be created")
註冊後,您可以使用如下列舉:
import QtQuick 2.0import CustomType 1.0Item { property int theme: Theme.Default}
新的型別註冊方式
Qt for Python現在還支援QmlElement裝飾器,該裝飾器的工作方式與C ++中的QML_ELEMENT類似。
QML_IMPORT_NAME = "com.library.name"QML_IMPORT_MAJOR_VERSION = 1QML_IMPORT_MINOR_VERSION = 0 # [email protected] ClassForQml(QObject): # ...
例如 此程式碼段會將ClassForQml暴露給QML,並且可以通過在全域性變數中指定的匯入名稱和版本來匯入。如果要註冊很多型別,這可能特別有用。
介紹完畢,謝謝!