1. 程式人生 > 其它 >ef 在此上下文中只支援基本型別或列舉型別_關於Qt for python中對QML支援的改進...

ef 在此上下文中只支援基本型別或列舉型別_關於Qt for python中對QML支援的改進...

技術標籤:ef 在此上下文中只支援基本型別或列舉型別

自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}

01dd5665-5222-eb11-8da9-e4434bdf6706.png

  • 增加非例項化型別支援

通過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,並且可以通過在全域性變數中指定的匯入名稱和版本來匯入。如果要註冊很多型別,這可能特別有用。

介紹完畢,謝謝!