• <menu id="w2i4a"></menu>
  • logo Qt使用教程2020

    文檔首頁>>Qt使用教程2020>>C++界面開發(fā)框架Qt:Qt for Python 6.0中改進對QML支持

    C++界面開發(fā)框架Qt:Qt for Python 6.0中改進對QML支持


    Qt是一個跨平臺框架,通常用作圖形工具包,它不僅創(chuàng)建CLI應(yīng)用程序中非常有用。而且它也可以在三種主要的臺式機操作系統(tǒng)以及移動操作系統(tǒng)(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式設(shè)備,Android(Necessitas)和iOS的端口上運行。現(xiàn)在我們?yōu)槟闾峁┝嗣赓M的試用版。趕快點擊下載Qt最新試用版>>

    點擊獲取更多文章教程

    自從PySide植到Qt5又名PySide2)的初始端口以來,由于QML的普及,我們希望在綁定集中完全支持QML的交互。

    在第一個正式發(fā)行版5.12中,涵蓋了QML和Python交互的許多用例,但還是忽略了社區(qū)真正需要的幾個用例?,F(xiàn)在我們正在開發(fā)Qt6的新功能和改進,我們希望解決其中的大多數(shù)問題。

    在這里,您可以找到我們到目前為止計劃在Python 6.0 Qt中所要完成的功能的摘要。

    無限制類型

    以前最多可以注冊50個自定義類型的限制在6.0中消失了,現(xiàn)在您可以根據(jù)需要注冊任意多個類型。

    單例類型

    從6.0開始,您可以使用qmlRegisterSingletonType注冊用于QML的自定義單例。

    例如,如果您想向QML公開有關(guān)操作系統(tǒng)的信息,則可以創(chuàng)建以下類:

    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)

    然后在CustomType1.0 下注冊:

    qmlRegisterSingletonType(SystemInfo, "CustomType", 1, 0, "SystemInfo")

    現(xiàn)在,您SystemInfo只需導(dǎo)入CustomTypeQML代碼即可訪問:

    import CustomType 1.0
    
    Text {
        text: "OS Name: " + SystemInfo.osName
    } 

    不可創(chuàng)建的類型

    另一個缺少的功能是將自定義QML類型注冊為不可創(chuàng)建的選項,這可以通過qmlRegisterUncreatableType來實現(xiàn)。

    您可以使用它,例如在QML中注冊自定義enum類

    class Theme(QObject):
        @QEnum
        class Variant(Enum):
            Default, Dark, HighContrast = range(3)
    
    # ...  qmlRegisterUncreatableType(Theme, "CustomType", 1, 0, "Theme", "Theme can't be created")

    注冊后,您可以這樣使用enum:

    import QtQuick 2.0
    
    import CustomType 1.0
    
    Item {
        property int theme: Theme.Default
    }
    適應(yīng)新的類注冊方式

    Qt for Python現(xiàn)在還支持QmlElement decorator模式,該decorator的工作方式與QML_ELEMENTC ++ 類似。

    QML_IMPORT_NAME = "com.library.name"
    QML_IMPORT_MAJOR_VERSION = 1
    QML_IMPORT_MINOR_VERSION = 0 # Optional
      @QmlElement
    class ClassForQml(QObject):
        # ... 

    例如,此代碼段將公開ClassForQml給QML,并且可以通過全局變量中指定的導(dǎo)入名稱和版本來導(dǎo)入。如果您要注冊許多類型,這對您可能特別有用。

    結(jié)論

    我們了解到QML + Python交互的其他方面可能是您的應(yīng)用程序當(dāng)前需要的,你或者會從中受益。因此,我希望您的一些意見建議,甚至是有關(guān)如何實現(xiàn)Qt forPython的創(chuàng)新,對于基于QML的應(yīng)用程序而言,這是一個非常好重要的部分。

    如果這篇文章沒能滿足你的需求、點擊獲取更多文章教程!現(xiàn)在立刻下載Qt免費試用吧!更多Qt類開發(fā)工具QtitanRibbon、QtitanChart、QtitanNavigationQtitanDocking、QtitanDataGrid在線訂購現(xiàn)直降1000元,歡迎咨詢慧都在線客服獲取更多優(yōu)惠>>

    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();