日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

QML与C++混合编程详解

發布時間:2025/3/15 c/c++ 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QML与C++混合编程详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載地址:https://www.cnblogs.com/findumars/p/6090850.html


1、QML與C++為什么要混合編程

QML與C++為什么要混合編程,簡單來說,就是使用QML高效便捷地構建UI,而C++則用來實現業務邏輯和復雜算法,下面介紹了兩者間交互的方法與技巧。

2、QML訪問C++概述

Qt集成了QML引擎和Qt元對象系統,使得QML很容易從C++中得到擴展,在一定的條件下,QML就可以訪問QObject派生類的成員,例如信號、槽函數、枚舉類型、屬性、成員函數等。

QML訪問C++有兩個方法:一是在Qt元對象系統中注冊C++類,在QML中實例化、訪問。二是在C++中實例化并設置為QML上下文屬性,在QML中直接使用。與后者相比,前者可以使C++類在QML中作為一個數據類型,例如函數參數類型或屬性類型,也可以使用其枚舉類型、單例等,功能更強大。

3、如何實現可以被QML訪問的C++

C++類要想被QML訪問,首先必須滿足兩個條件:一是派生自QObject類或QObject類的子類,二是使用Q_OBJECT宏。QObject類是所有Qt對象的基類,作為Qt對象模型的核心,提供了信號與槽機制等很多重要特性。Q_OBJECT宏必須在private區(C++默認為private)聲明,用來聲明信號與槽,使用Qt元對象系統提供的內容,位置一般在語句塊首行。下面例子在QtCreator3.1.2中創建,Projects選擇QtQuickApplication,工程名為Gemini,Component選擇QtQuick2.2,然后在自動生成的文件中添磚加瓦。

信號與槽——

(1)添加頭文件Gemini.h

[cpp]?view plain?copy
  • #ifndef?GEMINI_H??
  • #define?GEMINI_H??
  • //?Gemini.h??
  • #include?<QObject>??
  • #include?<QDebug>??
  • class?Gemini?:?public?QObject??
  • {??
  • ????Q_OBJECT??
  • signals:??
  • ????void?begin();??
  • public?slots:??
  • ????void?doSomething()?{??
  • ????????qDebug()?<<?"Gemini::doSomething()?called";??
  • ????}??
  • };??
  • #endif?//?GEMINI_H??
  • ?

    Gemini類中的信號begin()和槽doSomething()都可以被QML訪問。槽必須聲明為public或protected,信號在C++中使用時要用到emit關鍵字,但在QML中就是個普通的函數,用法同函數一樣,信號處理器形式為on<Signal>,Signal首字母大寫。信號不支持重載,多個信號的名字相同而參數不同時,能夠被識別的只是最后一個信號,與信號的參數無關。

    (2)修改main.cpp

    [cpp]?view plain?copy
  • //?main.cpp??
  • #include?<QGuiApplication>??
  • #include?<QQmlApplicationEngine>??
  • #include?<QtQml>??
  • #include?<Gemini.h>??
  • int?main(int?argc,?char?*argv[])??
  • {??
  • ????QGuiApplication?app(argc,?argv);??
  • ????qmlRegisterType<Gemini>("Union.Lotto.Gemini",?1,?0,?"Gemini");??
  • ????QQmlApplicationEngine?engine;??
  • ????engine.load(QUrl(QStringLiteral("qrc:///main.qml")));??
  • ????return?app.exec();??
  • }??
  • 這里把Gemini類注冊(qmlRegisterType)到了Qt元對象系統,當然也可以先實例化再設置為QML上下文屬性,相關內容將在后面詳細介紹。

    (3)修改main.qml

    [sql]?view plain?copy
  • //?main.qml??
  • import?QtQuick?2.2??
  • import?QtQuick.Window?2.1??
  • import?Union.Lotto.Gemini?1.0??
  • Window?{??
  • ????visible:?true??
  • ????width:?360;?height:?360??
  • ????title:?"Union?Lotto?Game"??
  • ????color:?"white"??
  • ????MouseArea?{??
  • ????????anchors.fill:?parent??
  • ????????onClicked:?{??
  • ????????????gemini.begin()??
  • ????????}??
  • ????}??
  • ????Gemini?{??
  • ????????id:?gemini??
  • ????????onBegin:?doSomething()??
  • ????}??
  • }??
  • ?

    Gemini類注冊到Qt元對象系統后,并且在QML文件中導入(import),關鍵字Gemini就可以在當前QML文件中當作一種QML類型來用了。例子中有個MouseArea,單擊鼠標時會發送begin()信號,進而調用doSomething()槽函數。

    枚舉類型——

    (1)修改頭文件Gemini.h

    [cpp]?view plain?copy
  • #ifndef?GEMINI_H??
  • #define?GEMINI_H??
  • //?Gemini.h??
  • #include?<QObject>??
  • #include?<QDebug>??
  • class?Gemini?:?public?QObject??
  • {??
  • ????Q_OBJECT??
  • ????Q_ENUMS(BALL_COLOR)??
  • public:??
  • ????Gemini()?:?m_ballColor(BALL_COLOR_YELLOW)?{??
  • ????????qDebug()?<<?"Gemini::Gemini()?called";??
  • ????}??
  • ????enum?BALL_COLOR?{??
  • ????????BALL_COLOR_YELLOW,??
  • ????????BALL_COLOR_RED,??
  • ????????BALL_COLOR_BLUE,??
  • ????????BALL_COLOR_ALL??
  • ????};??
  • signals:??
  • ????void?begin();??
  • public?slots:??
  • ????void?doSomething(BALL_COLOR?ballColor)?{??
  • ????????qDebug()?<<?"Gemini::doSomething()?called?with"?<<?ballColor;??
  • ????????if(ballColor?!=?m_ballColor)?{??
  • ????????????m_ballColor?=?ballColor;??
  • ????????????qDebug()?<<?"ball?color?changed";??
  • ????????}??
  • ????}??
  • private:??
  • ????BALL_COLOR?m_ballColor;??
  • };??
  • #endif?//?GEMINI_H??
  • Gemini類中添加了public的BALL_COLOR枚舉類型,這個枚舉類型要想在QML中使用,就用到了Q_ENUMS()宏。

    (2)修改main.qml

    [plain]?view plain?copy
  • //?main.qml??
  • import?QtQuick?2.2??
  • import?QtQuick.Window?2.1??
  • import?Union.Lotto.Gemini?1.0??
  • Window?{??
  • ????visible:?true??
  • ????width:?360;?height:?360??
  • ????title:?"Union?Lotto?Game"??
  • ????color:?"white"??
  • ????MouseArea?{??
  • ????????anchors.fill:?parent??
  • ????????onClicked:?{??
  • ????????????gemini.begin()??
  • ????????}??
  • ????}??
  • ????Gemini?{??
  • ????????id:?gemini??
  • ????????onBegin:?doSomething(Gemini.BALL_COLOR_RED)??
  • ????}??
  • }??
  • 在QML中使用枚舉類型的方式是<CLASS_NAME>.<ENUM_VALUE>,例如Gemini.BALL_COLOR_RED。

    成員函數——

    (1)修改頭文件Gemini.h

    [cpp]?view plain?copy
  • #ifndef?GEMINI_H??
  • #define?GEMINI_H??
  • //?Gemini.h??
  • #include?<QObject>??
  • #include?<QDebug>??
  • class?Gemini?:?public?QObject??
  • {??
  • ????Q_OBJECT??
  • ????Q_ENUMS(BALL_COLOR)??
  • public:??
  • ????Gemini()?:?m_ballColor(BALL_COLOR_YELLOW)?{??
  • ????????qDebug()?<<?"Gemini::Gemini()?called";??
  • ????}??
  • ????enum?BALL_COLOR?{??
  • ????????BALL_COLOR_YELLOW,??
  • ????????BALL_COLOR_RED,??
  • ????????BALL_COLOR_BLUE,??
  • ????????BALL_COLOR_ALL??
  • ????};??
  • ????Q_INVOKABLE?void?stop()?{??
  • ????????qDebug()?<<?"Gemini::stop()?called";??
  • ????}??
  • signals:??
  • ????void?begin();??
  • public?slots:??
  • ????void?doSomething(BALL_COLOR?ballColor)?{??
  • ????????qDebug()?<<?"Gemini::doSomething()?called?with"?<<?ballColor;??
  • ????????if(ballColor?!=?m_ballColor)?{??
  • ????????????m_ballColor?=?ballColor;??
  • ????????????qDebug()?<<?"ball?color?changed";??
  • ????????}??
  • ????}??
  • private:??
  • ????BALL_COLOR?m_ballColor;??
  • };??
  • #endif?//?GEMINI_H??
  • Gemini類中添加了成員函數stop(),在QML中訪問的前提是public或protected成員函數,且使用Q_INVOKABLE宏,位置在函數返回類型的前面。

    (2)修改main.qml

    [plain]?view plain?copy
  • //?main.qml??
  • import?QtQuick?2.2??
  • import?QtQuick.Window?2.1??
  • import?Union.Lotto.Gemini?1.0??
  • Window?{??
  • ????visible:?true??
  • ????width:?360;?height:?360??
  • ????title:?"Union?Lotto?Game"??
  • ????color:?"white"??
  • ????MouseArea?{??
  • ????????anchors.fill:?parent??
  • ????????onClicked:?{??
  • ????????????gemini.begin()??
  • ????????????gemini.stop()??
  • ????????}??
  • ????}??
  • ????Gemini?{??
  • ????????id:?gemini??
  • ????????onBegin:?doSomething(Gemini.BALL_COLOR_RED)??
  • ????}??
  • }??
  • 在QML中訪問C++的成員函數的形式是<id>.<method>,例如gemini.stop()。支持函數重載,這個與信號不同。

    C++類的屬性——

    (1)修改頭文件Gemini.h

    [cpp]?view plain?copy
  • #ifndef?GEMINI_H??
  • #define?GEMINI_H??
  • //?Gemini.h??
  • #include?<QObject>??
  • #include?<QDebug>??
  • class?Gemini?:?public?QObject??
  • {??
  • ????Q_OBJECT??
  • ????Q_ENUMS(BALL_COLOR)??
  • ????Q_PROPERTY(unsigned?int?ballNumber?READ?ballNumber?WRITE?setBallNumber?NOTIFY?ballNumberChanged)??
  • public:??
  • ????Gemini()?:?m_ballColor(BALL_COLOR_YELLOW),?m_ballNumber(0)?{??
  • ????????qDebug()?<<?"Gemini::Gemini()?called";??
  • ????}??
  • ????enum?BALL_COLOR?{??
  • ????????BALL_COLOR_YELLOW,??
  • ????????BALL_COLOR_RED,??
  • ????????BALL_COLOR_BLUE,??
  • ????????BALL_COLOR_ALL??
  • ????};??
  • ????unsigned?int?ballNumber()?const?{??
  • ????????return?m_ballNumber;??
  • ????}??
  • ????void?setBallNumber(const?unsigned?int?&ballNumber)?{??
  • ????????if(ballNumber?!=?m_ballNumber)?{??
  • ????????????m_ballNumber?=?ballNumber;??
  • ????????????emit?ballNumberChanged();??
  • ????????}??
  • ????}??
  • ????Q_INVOKABLE?void?stop()?{??
  • ????????qDebug()?<<?"Gemini::stop()?called";??
  • ????}??
  • signals:??
  • ????void?begin();??
  • ????void?ballNumberChanged();??
  • public?slots:??
  • ????void?doSomething(BALL_COLOR?ballColor)?{??
  • ????????qDebug()?<<?"Gemini::doSomething()?called?with"?<<?ballColor;??
  • ????????if(ballColor?!=?m_ballColor)?{??
  • ????????????m_ballColor?=?ballColor;??
  • ????????????qDebug()?<<?"ball?color?changed";??
  • ????????}??
  • ????}??
  • private:??
  • ????BALL_COLOR?m_ballColor;??
  • ????unsigned?int?m_ballNumber;??
  • };??
  • #endif?//?GEMINI_H??
  • Gemini類中添加了Q_PROPERTY()宏,用來在QObject派生類中聲明屬性,這個屬性如同類的數據成員一樣,但它又有一些額外的特性可通過Qt元對象系統來訪問。

    下面是Q_PROPERTY()宏的原型:

    [cpp]?view plain?copy
  • Q_PROPERTY()(type?name??
  • ??(READ?getFunction?[WRITE?setFunction]?|??
  • ?????????????MEMBER?memberName?[(READ?getFunction?|?WRITE?setFunction)])??
  • ????????????[RESET?resetFunction]??
  • ????????????[NOTIFY?notifySignal]??
  • ????????????[REVISION?int]??
  • ????????????[DESIGNABLE?bool]??
  • ????????????[SCRIPTABLE?bool]??
  • ????????????[STORED?bool]??
  • ????????????[USER?bool]??
  • ????????????[CONSTANT]??
  • ????????????[FINAL])??
  • 屬性的type、name是必需的,其它是可選項,常用的有READ、WRITE、NOTIFY。屬性的type可以是QVariant支持的任何類型,也可以是自定義類型,包括自定義類、列表類型、組屬性等。另外,屬性的READ、WRITE、RESET是可以被繼承的,也可以是虛函數,這些特性并不常用。

    READ:讀取屬性值,如果沒有設置MEMBER的話,它是必需的。一般情況下,函數是個const函數,返回值類型必須是屬性本身的類型或這個類型的const引用,沒有參數。

    WRITE:設置屬性值,可選項。函數必須返回void,有且僅有一個參數,參數類型必須是屬性本身的類型或這個類型的指針或引用。

    NOTIFY:與屬性關聯的可選信號。這個信號必須在類中聲明過,當屬性值改變時,就可觸發這個信號,可以沒有參數,有參數的話只能是一個類型同屬性本身類型的參數,用來記錄屬性改變后的值。

    Q_PROPERTY()的詳細用法可參考如下網址:

    http://doc.qt.io/qt-5/properties.html#qt-s-property-system

    (2)修改main.qml

    [sql]?view plain?copy
  • //?main.qml??
  • import?QtQuick?2.2??
  • import?QtQuick.Window?2.1??
  • import?Union.Lotto.Gemini?1.0??
  • Window?{??
  • ????visible:?true??
  • ????width:?360;?height:?360??
  • ????title:?"Union?Lotto?Game"??
  • ????color:?"white"??
  • ????MouseArea?{??
  • ????????anchors.fill:?parent??
  • ????????onClicked:?{??
  • ????????????gemini.begin()??
  • ????????????gemini.stop()??
  • ????????????gemini.ballNumber?=?10??
  • ????????}??
  • ????}??
  • ????Gemini?{??
  • ????????id:?gemini??
  • ????????onBegin:?doSomething(Gemini.BALL_COLOR_RED)??
  • ????????onBallNumberChanged:?console.log("new?ball?number?is",?ballNumber)?//?10??
  • ????????Component.onCompleted:?console.log("default?ball?number?is",?ballNumber)?//?0??
  • ????}??
  • }??
  • Gemini類中的ballNumber屬性可以在QML中訪問、修改,訪問時調用了ballNumber()函數,修改時調用了setBallNumber()函數,同時還發送了一個信號來自動更新這個屬性值。

    4、注冊C++類為QML類型

    QObject派生類可以注冊到Qt元對象系統,使得該類在QML中同其它內建類型一樣,可以作為一個數據類型來使用。QML引擎允許注冊可實例化的類型,也可以是不可實例化的類型,常見的注冊函數有:

    [cpp]?view plain?copy
  • qmlRegisterInterface()??
  • qmlRegisterRevision()??
  • qmlRegisterSingletonType()??
  • qmlRegisterType()??
  • qmlRegisterTypeNotAvailable()??
  • qmlRegisterUncreatableType()??
  • 這些注冊函數各有其用,可根據實際需要選擇,使用時需要包含<QtQml>。常用的為qmlRegisterType(),它有三個重載函數,這里只介紹其一:

    [cpp]?view plain?copy
  • ??template<typename?T>??
  • ??int?qmlRegisterType(const?char?*uri,??
  • int?versionMajor,??
  • int?versionMinor,???
  • ???????const?char?*qmlName);??
  • 這個模板函數注冊C++類到Qt元對象系統中,uri是需要導入到QML中的庫名,versionMajor和versionMinor是其版本數字,qmlName是在QML中可以使用的類型名。例如上面例子main.cpp中的代碼:

    [cpp]?view plain?copy
  • qmlRegisterType<Gemini>("Union.Lotto.Gemini",?1,?0,?"Gemini");??
  • main.cpp中將Gemini類注冊為在QML中可以使用的Gemini類型,主版本為1,次版本為0,庫的名字是Union.Lotto.Gemini。main.qml中導入了這個庫,使用Gemini構造了一個對象,id為gemini,這樣就可以借助id來訪問C++了。

    注冊動作必須在QML上下文創建之前,否則無效。

    另外:QQuickView為QtQuickUI提供了一個窗口,可以方便地加載QML文件并顯示其界面。QApplication派生自QGuiApplication,而QGuiApplication又派生自QCoreApplication,這三個類是常見的管理Qt應用程序的類。QQmlApplicationEngine可以方便地從一個單一的QML文件中加載應用程序,它派生自QQmlEngine,QQmlEngine則提供了加載QML組件的環境,可以與QQmlComponent、QQmlContext等一起使用。

    5、QML上下文屬性設置

    在C++應用程序加載QML對象時,我們可以直接嵌入一些C++數據來給QML使用,這里需要用到QQmlContext::setContextProperty(),即設置QML上下問屬性,它可以是一個簡單的類型,也可以是任何我們自定義的類對象。

    (1)修改main.cpp

    [cpp]?view plain?copy
  • //?main.cpp??
  • #include?<QGuiApplication>??
  • #include?<QQuickView>??
  • #include?<QQmlContext>??
  • #include?<Gemini.h>??
  • int?main(int?argc,?char?*argv[])??
  • {??
  • ????QGuiApplication?app(argc,?argv);??
  • ????QQuickView?view;??
  • ????Gemini?gemini;??
  • ????view.rootContext()->setContextProperty("gemini",?&gemini);??
  • ????view.setSource(QUrl(QStringLiteral("qrc:///main.qml")));??
  • ????view.show();??
  • ????return?app.exec();??
  • }??
  • 徹底修改一下main.cpp吧,這里使用了QQuickView,注意頭文件的變化,Gemini類先實例化為gemini對象,然后注冊為QML上下文屬性。

    (2)修改main.qml

    [plain]?view plain?copy
  • //?main.qml??
  • import?QtQuick?2.2??
  • Item?{??
  • ????width:?360;?height:?360??
  • ????MouseArea?{??
  • ????????anchors.fill:?parent??
  • ????????onClicked:?{??
  • ????????????gemini.begin()??
  • ????????????gemini.stop()??
  • ????????}??
  • ????}??
  • ????Connections?{??
  • ????????target:?gemini??
  • ????????onBegin:console.log("aaaa")??
  • ????}??
  • }??
  • 既然main.cpp修改了那么多東西,main.qml也要做相應的修改,在main.qml中不能使用Gemini類型來實例化了,也不能調用doSomething()槽函數了,因為doSomething()函數中的枚舉類型在QML中是訪問不到的,正確的用法是通過QML上下文屬性“gemini”來訪問C++,可以訪問信號begin()和成員函數stop(),此時的信號處理器就需要用Connections來處理了,如上面例子中所示。

    6、C++訪問QML

    同樣,在C++中也可以訪問QML中的屬性、函數和信號。

    在C++中加載QML文件可以用QQmlComponent或QQuickView,然后就可以在C++中訪問QML對象了。QQuickView提供了一個顯示用戶界面的窗口,而QQmlComponent沒有。

    QQuickView::rootObject()返回了組件實例,是一個有用的函數。前面的例子中已經使用過QQuickView了,下面的例子介紹QQmlComponent的用法。

    使用QQmlComponent——

    修改main.cpp

    [cpp]?view plain?copy
  • //?main.cpp??
  • #include?<QGuiApplication>??
  • #include?<QtQml>??
  • #include?<Gemini.h>??
  • int?main(int?argc,?char?*argv[])??
  • {??
  • ????QGuiApplication?app(argc,?argv);??
  • ????qmlRegisterType<Gemini>("Union.Lotto.Gemini",?1,?0,?"Gemini");??
  • ????QQmlEngine?engine;??
  • ????//?set?qml?context?property??
  • ????//?Gemini?aGemini;??
  • ????//?engine.rootContext()->setContextProperty("aGemini",?&aGemini);??
  • ????QQmlComponent?component(&engine,?QUrl(QStringLiteral("qrc:///main.qml")));??
  • ????component.create();??
  • ????return?app.exec();??
  • }??
  • 例子中注釋的部分是設置QML上下文屬性的方法。

    在C++中訪問QML中的屬性——

    在C++中加載了QML文件并進行組件實例化后,就可以在C++中訪問、修改這個實例的屬性值了,可以是QML內建屬性,也可以是自定義屬性。

    (1)修改main.qml

    [plain]?view plain?copy
  • //?main.qml??
  • import?QtQuick?2.2??
  • import?QtQuick.Window?2.1??
  • import?Union.Lotto.Gemini?1.0??
  • Window?{??
  • ????visible:?true??
  • ????width:?360;?height:?360??
  • ????title:?"Union?Lotto?Game"??
  • ????color:?"white"??
  • ????Rectangle?{??
  • ????????objectName:?"rect"??
  • ????????anchors.fill:?parent??
  • ????????color:?"yellow"??
  • ????}??
  • ????MouseArea?{??
  • ????????anchors.fill:?parent??
  • ????????onClicked:?{??
  • ????????????gemini.begin()??
  • ????????????gemini.stop()??
  • ????????????gemini.ballNumber?=?10??
  • ????????}??
  • ????}??
  • ????Gemini?{??
  • ????????id:?gemini??
  • ????????onBegin:?doSomething(Gemini.BALL_COLOR_RED)??
  • ????????onBallNumberChanged:?console.log("new?ball?number?is",?ballNumber)?//?10??
  • ????????Component.onCompleted:?console.log("default?ball?number?is",?ballNumber)?//?0??
  • ????}??
  • }??
  • 在main.qml中添加了一個Rectangle,設置objectName屬性值為“rect”,這個值是為了在C++中能夠找到這個Rectangle

    (2)修改main.cpp

    [cpp]?view plain?copy
  • //?main.cpp??
  • #include?<QGuiApplication>??
  • #include?<QtQml>??
  • #include?<Gemini.h>??
  • int?main(int?argc,?char?*argv[])??
  • {??
  • ????QGuiApplication?app(argc,?argv);??
  • ????qmlRegisterType<Gemini>("Union.Lotto.Gemini",?1,?0,?"Gemini");??
  • ????QQmlEngine?engine;??
  • ????//?set?qml?context?property??
  • ????//?Gemini?aGemini;??
  • ????//?engine.rootContext()->setContextProperty("aGemini",?&aGemini);??
  • ????QQmlComponent?component(&engine,?QUrl(QStringLiteral("qrc:///main.qml")));??
  • ????QObject?*object?=?component.create();??
  • ????qDebug()?<<?"width?value?is"?<<?object->property("width").toInt();??
  • ????object->setProperty("width",?500);??
  • ????qDebug()?<<?"height?value?is"?<<?QQmlProperty::read(object,?"height").toInt();??
  • ????QQmlProperty::write(object,?"height",?500);??
  • ????QObject?*rect?=?object->findChild<QObject*>("rect");??
  • ????if(rect)?{??
  • ????????rect->setProperty("color",?"black");??
  • ????}??
  • ????return?app.exec();??
  • }??
  • 首先,使用了QObject::property()/setProperty()來讀取、修改width屬性值。

    接著,使用了QQmlProperty::read()/write()來讀取、修改height屬性值。

    另外,如果某個對象的類型是QQuickItem,例如QQuickView::rootObject()的返回值,這時就可以使用QQuickItem::width/setWidth()來訪問、修改width屬性值了。

    有時候,QML組件是一個復雜的樹型結構,包含兄弟組件和孩子組件,我們可以使用QObject::findchild()/findchildren()來查找,如上面例子所示。

    在C++中訪問QML中的函數與信號——

    在C++中,使用QMetaObject::invokeMethod()可以調用QML中的函數,從QML傳遞過來的函數參數和返回值會被轉換為C++中的QVariant類型,成功返回true,參數不正確或被調用函數名錯誤返回false,invokeMethod()共有四個重載函數,用法相似。必須使用Q_ARG()宏來聲明函數參數,用Q_RETURN_ARG()宏來聲明函數返回值,其原型如下:

    [cpp]?view plain?copy
  • QGenericArgument???????????Q_ARG(Type,?const?Type?&?value)??
  • QGenericReturnArgument?????Q_RETURN_ARG(Type,?Type?&?value)??
  • 使用QObject::connect()可以連接QML中的信號,connect()共有四個重載函數,它們都是靜態函數。必須使用SIGNAL()宏來聲明信號,SLOT()宏聲明槽函數。

    使用QObject::disconnect()可以解除信號與槽函數的連接。

    (1)修改main.qml

    [plain]?view plain?copy
  • import?QtQuick?2.2??
  • import?QtQuick.Window?2.1??
  • import?Union.Lotto.Gemini?1.0??
  • Window?{??
  • ????visible:?true??
  • ????width:?360;?height:?360??
  • ????title:?"Union?Lotto?Game"??
  • ????color:?"white"??
  • ????signal?qmlSignal(string?message)??
  • ????onQmlSignal:?console.log("qml?signal?message?is",?message)?//?this?is?a?qml?signal??
  • ????function?qmlFunction(parameter)?{??
  • ????????console.log("qml?function?parameter?is",?parameter)?//?Hello?from?C++??
  • ????????return?"function?from?qml"??
  • ????}??
  • ????Rectangle?{??
  • ????????objectName:?"rect"??
  • ????????anchors.fill:?parent??
  • ????????color:?"yellow"??
  • ????}??
  • ????MouseArea?{??
  • ????????anchors.fill:?parent??
  • ????????onClicked:?{??
  • ????????????gemini.begin()??
  • ????????????gemini.stop()??
  • ????????????gemini.ballNumber?=?10??
  • ????????????qmlSignal("this?is?a?qml?signal")??
  • ????????}??
  • ????}??
  • ????Gemini?{??
  • ????????id:?gemini??
  • ????????onBegin:?doSomething(Gemini.BALL_COLOR_RED)??
  • ????????onBallNumberChanged:?console.log("new?ball?number?is",?ballNumber)?//?10??
  • ????????Component.onCompleted:?console.log("default?ball?number?is",?ballNumber)?//?0??
  • ????}??
  • }??
  • main.qml中添加了qmlSignal()信號和qmlFunction()函數,信號在QML中發送,函數在C++中調用。

    (2)修改Gemini.h

    [cpp]?view plain?copy
  • #ifndef?GEMINI_H??
  • #define?GEMINI_H??
  • //?Gemini.h??
  • #include?<QObject>??
  • #include?<QDebug>??
  • class?Gemini?:?public?QObject??
  • {??
  • ????Q_OBJECT??
  • ????Q_ENUMS(BALL_COLOR)??
  • ????Q_PROPERTY(unsigned?int?ballNumber?READ?ballNumber?WRITE?setBallNumber?NOTIFY?ballNumberChanged)??
  • public:??
  • ????Gemini()?:?m_ballColor(BALL_COLOR_YELLOW),?m_ballNumber(0)?{??
  • ????????qDebug()?<<?"Gemini::Gemini()?called";??
  • ????}??
  • ????enum?BALL_COLOR?{??
  • ????????BALL_COLOR_YELLOW,??
  • ????????BALL_COLOR_RED,??
  • ????????BALL_COLOR_BLUE,??
  • ????????BALL_COLOR_ALL??
  • ????};??
  • ????unsigned?int?ballNumber()?const?{??
  • ????????return?m_ballNumber;??
  • ????}??
  • ????void?setBallNumber(const?unsigned?int?&ballNumber)?{??
  • ????????if(ballNumber?!=?m_ballNumber)?{??
  • ????????????m_ballNumber?=?ballNumber;??
  • ????????????emit?ballNumberChanged();??
  • ????????}??
  • ????}??
  • ????Q_INVOKABLE?void?stop()?{??
  • ????????qDebug()?<<?"Gemini::stop()?called";??
  • ????}??
  • signals:??
  • ????void?begin();??
  • ????void?ballNumberChanged();??
  • public?slots:??
  • ????void?doSomething(BALL_COLOR?ballColor)?{??
  • ????????qDebug()?<<?"Gemini::doSomething()?called?with"?<<?ballColor;??
  • ????????if(ballColor?!=?m_ballColor)?{??
  • ????????????m_ballColor?=?ballColor;??
  • ????????????qDebug()?<<?"ball?color?changed";??
  • ????????}??
  • ????}??
  • ????void?cppSlot(const?QString?&message)?{??
  • ????????qDebug()?<<?"Called?the?C++?slot?with?message:"?<<?message;?//?this?is?a?qml?signal??
  • ????}??
  • private:??
  • ????BALL_COLOR?m_ballColor;??
  • ????unsigned?int?m_ballNumber;??
  • };??
  • #endif?//?GEMINI_H??
  • Gemini類中添加了cppSlot()槽函數,將要在main.cpp中與QML的信號connect

    (3)修改main.cpp

    [cpp]?view plain?copy
  • #include?<QGuiApplication>??
  • #include?<QtQml>??
  • #include?<Gemini.h>??
  • int?main(int?argc,?char?*argv[])??
  • {??
  • ????QGuiApplication?app(argc,?argv);??
  • ????qmlRegisterType<Gemini>("Union.Lotto.Gemini",?1,?0,?"Gemini");??
  • ????QQmlEngine?engine;??
  • ????//?set?qml?context?property??
  • ????//?Gemini?aGemini;??
  • ????//?engine.rootContext()->setContextProperty("aGemini",?&aGemini);??
  • ????QQmlComponent?component(&engine,?QUrl(QStringLiteral("qrc:///main.qml")));??
  • ????QObject?*object?=?component.create();??
  • ????qDebug()?<<?"width?value?is"?<<?object->property("width").toInt();??
  • ????object->setProperty("width",?500);??
  • ????qDebug()?<<?"height?value?is"?<<?QQmlProperty::read(object,?"height").toInt();??
  • ????QQmlProperty::write(object,?"height",?500);??
  • ????QObject?*rect?=?object->findChild<QObject*>("rect");??
  • ????if(rect)?{??
  • ????????rect->setProperty("color",?"black");??
  • ????}??
  • ????QVariant?returnedValue;??
  • ????QVariant?message?=?"Hello?from?C++";??
  • ????QMetaObject::invokeMethod(object,?"qmlFunction",??
  • ??????????????????????????????Q_RETURN_ARG(QVariant,?returnedValue),??
  • ??????????????????????????????Q_ARG(QVariant,?message));??
  • ????qDebug()?<<?"returnedValue?is"?<<?returnedValue.toString();?//?function?from?qml??
  • ????Gemini?test;??
  • ????QObject::connect(object,?SIGNAL(qmlSignal(QString)),??
  • ?????????????????????&test,?SLOT(cppSlot(QString)));??
  • ????return?app.exec();??
  • }??
  • 在main.cpp中添加了QMeta::invokeMethod()和QObject::connect()來分別訪問QML中函數和信號。

    7、總結

    本文主要介紹了QML與C++混合編程常用的方法與技巧,在使用過程中有幾點值得注意:

    ?????????自定義類一定要派生自QObject類或其子類。

    ?????????必須使用Q_OBJECT宏。

    ?????????注冊自定義類到Qt元對象系統或設置自定義類對象實例為QML上下文屬性是必須的。

    ?????????兩者交互進行數據傳遞時,要符合QML與C++間數據類型的轉換規則。

    ?

    http://blog.csdn.net/ieearth/article/details/42243553

    總結

    以上是生活随笔為你收集整理的QML与C++混合编程详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    国产美腿白丝袜足在线av | 麻豆影视在线播放 | 97在线视频免费看 | 在线播放 日韩专区 | 日本黄色大片儿 | 亚洲精品乱码久久久久久蜜桃动漫 | 91完整版| 在线视频日韩精品 | av在线观| 国产精品久久久久久a | 三级视频国产 | 午夜成人免费影院 | 96香蕉视频 | 免费在线黄 | 91综合视频在线观看 | 成人免费网站在线观看 | 免费日韩一区二区三区 | 亚洲高清91 | 国产精品乱码高清在线看 | 久青草视频 | 福利网址在线观看 | 美女免费视频一区二区 | 五月天com | 久久99国产精品免费网站 | 欧美日韩国产一区二区在线观看 | 国产精品一区二区三区在线免费观看 | 欧美孕妇视频 | 欧美精品午夜 | 国产精品第10页 | 精品国产123 | 国产精品 欧美 日韩 | 国产成人福利在线观看 | 亚洲欧美日本一区二区三区 | 亚洲va欧美va国产va黑人 | 久久久精品网站 | 国产黑丝袜在线 | 精品爱爱 | 最新av在线免费观看 | 久久成人欧美 | 国产日韩欧美在线影视 | 国产69精品久久久久久 | 狠狠五月天 | 美女福利视频网 | 欧美日韩大片在线观看 | 午夜黄网 | 日韩精品久久久久久久电影99爱 | 人人插人人玩 | 久草在线精品观看 | 丝袜美腿亚洲综合 | 狠狠网 | 亚洲精品视频在 | 在线观看视频你懂的 | 亚洲国产日韩一区 | 99久精品视频| 国产精品18久久久 | 在线小视频 | 久久久久国产a免费观看rela | 91免费看黄色 | 国产一区二区午夜 | 99r在线播放 | 人人看人人草 | 日韩av手机在线观看 | 精品99免费视频 | 人人爽人人| 精品色999 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 天天碰天天操视频 | 干干夜夜 | 日韩高清成人 | 国产成人精品亚洲日本在线观看 | 久久香蕉一区 | 午夜精品电影一区二区在线 | 在线三级中文 | 亚洲一区视频免费观看 | 久久久久久蜜桃一区二区 | 久久艹国产 | 特级毛片在线观看 | 久久综合九色综合97婷婷女人 | 成人动漫一区二区三区 | 欧美一级特黄aaaaaa大片在线观看 | 欧美色综合天天久久综合精品 | 久久99国产精品久久99 | 日韩免费一二三区 | 天堂av免费观看 | 国产精品国产三级国产 | 久久精品99国产精品日本 | 五月天堂网 | 欧美日韩在线观看一区 | 久久精品香蕉视频 | 国产色视频一区 | 久草在线一免费新视频 | 在线观看岛国片 | 精品在线观看免费 | 久久人人精| 欧美日韩国产一区二 | 色婷婷久久久综合中文字幕 | 日韩理论电影在线观看 | 婷婷色在线资源 | 日韩在线二区 | 热久久视久久精品18亚洲精品 | 99综合电影在线视频 | 一区二区三区在线视频观看58 | 日韩专区av| 久精品在线观看 | 国产免费精彩视频 | 免费一级黄色 | 亚洲精品视频在线观看视频 | 97在线免费观看视频 | 日本久久久久久久久 | 久久久国产一区二区三区 | 麻豆精品国产传媒 | 中文字幕美女免费在线 | 久久99国产精品自在自在app | 亚洲 欧美 国产 va在线影院 | av福利第一导航 | 成 人 黄 色 视频播放1 | 国产一卡二卡在线 | 国产精品免费久久久久 | 午夜精品久久久久久久爽 | 亚洲欧美日本国产 | 国产日韩精品一区二区三区 | 欧美国产在线看 | 亚洲成人黄色在线观看 | bbbb操bbbb | 又黄又爽又色无遮挡免费 | 精品一区二区在线免费观看 | 久久免费播放视频 | 337p日本欧洲亚洲大胆裸体艺术 | 天天射天天爽 | 午夜免费福利视频 | 亚洲婷婷在线 | 国产一级视频在线免费观看 | 久久激情综合网 | 亚洲精品在线视频播放 | 在线观看免费福利 | 免费看的毛片 | 在线免费观看国产精品 | 国产亚洲精品成人 | 国产精品久久电影网 | 国产美女精品在线 | 香蕉视频18 | 久久试看 | 成人动漫一区二区三区 | 九色porny真实丨国产18 | 99国产精品视频免费观看一公开 | 久久精品成人欧美大片古装 | 日韩高清无线码2023 | 首页av在线 | 狠狠gao | 处女av在线| 国产精品欧美 | 中文字幕免费成人 | 91九色成人蝌蚪首页 | 久久免费高清视频 | 91免费的视频在线播放 | 黄色亚洲片 | 免费久久久 | 日韩在线播放av | 国产小视频免费在线网址 | 亚洲欧洲精品一区 | 亚洲日本在线视频观看 | 亚洲激情五月 | 免费在线播放av电影 | 91| 激情久久一区二区三区 | 波多野结衣视频一区二区三区 | 操操操综合 | 亚洲天堂网站 | 最近2019中文免费高清视频观看www99 | 一本—道久久a久久精品蜜桃 | 99精品视频在线观看免费 | 亚洲最新av网址 | 91精品伦理| 亚洲国产成人久久综合 | 最新久久免费视频 | 久艹在线免费观看 | 在线岛国av| 91毛片在线| 91成人午夜| 黄色av免费看 | 国产成人在线综合 | 欧美热久久 | 免费在线激情视频 | 色综合色综合色综合 | 手机看国产毛片 | 在线观看视频免费播放 | 国产黄视频在线观看 | 久久激五月天综合精品 | 日韩精品一区二区三区中文字幕 | 成人影片在线免费观看 | 爱爱av网站| 91九色视频在线 | 懂色av一区二区三区蜜臀 | 亚洲九九九在线观看 | 特黄特黄的视频 | 国产亚洲人成网站在线观看 | 公与妇乱理三级xxx 在线观看视频在线观看 | 97韩国电影 | 丁香激情五月 | 欧美精品久久久久a | 日一日操一操 | 黄色三级av| 91麻豆精品国产 | 亚洲国产精品电影在线观看 | 亚洲最新av网址 | 日韩中文字幕免费视频 | 中文字幕成人 | 国产高清福利在线 | 黄网站app在线观看免费视频 | 久久久久久久看片 | 国产精品久久久久久久午夜 | 久草视频在 | 日韩在线资源 | 国产精品黄色在线观看 | 国产精品免费大片视频 | 九色精品免费永久在线 | 狠狠狠狠狠狠干 | 91中文视频 | 欧美aⅴ在线观看 | 久久久久久欧美二区电影网 | 色综合天天视频在线观看 | 99999精品| 亚洲精品国产综合久久 | 热久久精品在线 | av爱干 | 国产成人一区二区啪在线观看 | 日韩精品一区二区三区免费视频观看 | 狠狠狠狠干 | 国产精品久久久久久久7电影 | 日韩激情网| 久久久亚洲精品 | 波多野结衣日韩 | 成人蜜桃视频 | 国产小视频在线免费观看视频 | 色综合天天综合网国产成人网 | 黄网站免费久久 | 91精品国自产在线 | av免费网| 97人人澡人人爽人人模亚洲 | 国产黄色精品在线 | 黄色午夜网站 | 4438全国亚洲精品观看视频 | 久久国产欧美日韩精品 | 最新日韩精品 | 99c视频高清免费观看 | 成人h动漫在线看 | 欧美极品裸体 | 久久麻豆精品 | 五月婷婷中文网 | 91中文视频 | 色婷婷电影 | 成人av影视 | 国产成人精品一区二区三区 | 91av在线精品| 日本久久成人中文字幕电影 | 91在线免费观看网站 | 国产精品久久久久久久久久99 | 青青草国产免费 | 久精品视频免费观看2 | 麻豆果冻剧传媒在线播放 | 欧美视频不卡 | 天堂在线成人 | 69国产精品视频免费观看 | 天天天天天天操 | 国产精品久久久久久久久久久久午夜片 | 伊人婷婷色 | 韩日三级av| 午夜精品久久久久 | 国产a国产 | 国产亚洲精品久久网站 | 免费视频久久久久 | 亚洲黄在线观看 | 激情一区二区三区欧美 | 黄色av电影免费观看 | 免费高清在线一区 | 91爱爱网址| 三级视频片 | 久综合网| av一级免费 | 精品国产综合区久久久久久 | 玖玖精品在线 | 欧美三级在线播放 | 精品久久久久久久 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 国产精品成人久久久 | 日本爱爱免费 | 日韩va亚洲va欧美va久久 | 国产成人333kkk| 最新av在线播放 | 亚洲激情在线播放 | 超碰日韩 | 91成人看片 | 欧美日韩一区二区在线观看 | 亚洲日本精品 | 国产麻豆电影在线观看 | 一区在线观看 | 97碰在线| 国产一区二区手机在线观看 | 国产精品ssss在线亚洲 | 天天干,夜夜操 | 国产精品99久久免费黑人 | 丁香久久| 国产精品美女免费 | 2019免费中文字幕 | 五月婷婷久久丁香 | 精品在线观看一区二区 | 91亚洲欧美| 夜夜视频| 天天夜操 | 国产69久久精品成人看 | 五月婷在线播放 | av免费网站在线观看 | 亚洲欧美日韩精品一区二区 | 久久久亚洲精华液 | 久久蜜臀一区二区三区av | 精品亚洲男同gayvideo网站 | a午夜电影 | 亚洲精品午夜久久久 | 美女av在线免费 | 国产精品一区二区果冻传媒 | 亚洲精品视频免费在线观看 | 久久久免费国产 | 国产精品成人免费一区久久羞羞 | 午夜精品久久久久久99热明星 | 波多野结衣在线视频一区 | 精品国内自产拍在线观看视频 | 亚洲欧美经典 | 国产亚洲成av片在线观看 | 国产精品黄色在线观看 | 在线成人免费av | 欧美尹人 | 国产欧美综合在线观看 | 五月天综合激情 | 免费成人短视频 | 91精品欧美一区二区三区 | 黄色网中文字幕 | a精品视频 | 色99网| 91色视频| 奇米777777| 在线观看免费版高清版 | 国产123区在线观看 国产精品麻豆91 | 亚洲成人动漫在线观看 | 综合久久综合久久 | 啪啪小视频网站 | 亚洲精品一区二区三区高潮 | 久久视频免费 | 日本精品免费看 | 视频三区在线 | 天天操天天是 | 在线观看视频你懂得 | 亚洲黄色片一级 | 国产一线天在线观看 | 日本久久成人 | 国产又粗又硬又爽视频 | 婷婷丁香激情综合 | 91午夜精品 | 久久久国产精品成人免费 | 成人免费毛片aaaaaa片 | 天天干天天插伊人网 | 欧美日韩在线精品一区二区 | 波多野结衣视频一区 | 免费高清在线视频一区· | 中文字幕在线免费 | 国产二区av | 波多野结衣日韩 | 国产精品久久久久久婷婷天堂 | 亚洲精品国产精品国产 | 亚洲免费成人av电影 | 亚洲精品成人av在线 | 亚洲免费公开视频 | 国产精品久久久久四虎 | 国产免费一区二区三区最新 | 99免费观看视频 | 精品国产一区二区三区久久久蜜月 | 色婷婷在线观看视频 | 亚洲视频 在线观看 | 一级a毛片高清视频 | 在线观看免费成人av | 国产夫妻性生活自拍 | 日韩| 中文字幕亚洲欧美日韩 | 免费在线中文字幕 | 欧美日韩国产三级 | 亚洲理论在线观看电影 | 狠狠色丁香婷婷综合久小说久 | 麻豆视频国产 | 日韩超碰| 99视频一区 | 国产专区在线视频 | 天天干天天操天天干 | 久久国产亚洲 | 婷婷精品在线视频 | 国产中文欧美日韩在线 | 国产精品18毛片一区二区 | 国产精品情侣视频 | 日韩有码欧美 | 99精品国产成人一区二区 | 久久久三级视频 | 日韩av二区 | 色综合久久中文字幕综合网 | 免费看的黄网站软件 | 黄色福利视频网站 | 亚洲精品国偷拍自产在线观看蜜桃 | 91av蜜桃 | 免费在线 | 一区二区在线不卡 | 免费高清av在线看 | 精品伦理一区二区三区 | 欧美日韩在线播放一区 | 中文字幕第一页在线播放 | 国产第一页福利影院 | aaa日本高清在线播放免费观看 | 免费日韩在线 | 日韩欧美视频在线观看免费 | 久草精品在线播放 | 亚洲人成人99网站 | 九九热精品视频在线播放 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 99欧美精品 | 亚洲精品在 | 中文理论片 | 婷婷伊人五月 | 欧美日韩啪啪 | 国产精品久久久久免费观看 | 成年人在线观看网站 | 手机在线小视频 | 丝袜av一区 | 免费观看91视频 | 中文字幕色婷婷在线视频 | 久久精品1区 | 欧美日韩免费一区二区 | 亚洲国产播放 | 久久精品久久精品 | 国产专区在线播放 | 女人18片毛片90分钟 | 顶级欧美色妇4khd | 亚洲最新av网址 | 国产精品乱看 | 中文在线免费视频 | 国产精品久久久久久久电影 | 国产精品精品久久久久久 | 国产精品久久在线 | a级片网站 | 色网站在线 | 美女中文字幕 | 99婷婷狠狠成为人免费视频 | av片免费播放 | 免费视频久久久久久久 | 亚洲精品在线资源 | 狠狠色丁香婷婷 | 91亚洲成人 | 色视频成人在线观看免 | www免费 | 久久国产精品久久久久 | 中国精品一区二区 | 久久成人欧美 | 久久久亚洲精华液 | 在线观看一区二区视频 | 国产在线第三页 | 一级黄毛片 | 国产视频午夜 | 在线欧美中文字幕 | 日韩高清一区在线 | 波多野结衣一区二区 | 国产中文字幕三区 | 在线观看黄色免费视频 | 久草在线观看资源 | 色婷婷免费 | 四虎永久国产精品 | 91精品小视频 | 日韩欧美视频免费看 | 日韩精品一二三 | 97成人精品视频在线观看 | 成人一区二区三区中文字幕 | 开心色插 | 人人dvd| 欧美不卡视频在线 | 最新日韩电影 | 果冻av在线| 国产黄在线 | 中文字幕在线观看第二页 | 成人网中文字幕 | 免费高清在线观看成人 | 中文字幕婷婷 | 在线黄色国产电影 | 成年人免费电影 | a在线观看免费视频 | 91香蕉国产 | 草樱av | 不卡视频国产 | 精品国产三级a∨在线欧美 免费一级片在线观看 | 国产成人av一区二区三区在线观看 | 免费av大全| 午夜精品三区 | 在线播放 一区 | 成人久久毛片 | 一区二区三区在线不卡 | 国产在线观看网站 | 在线观看亚洲精品 | 久久99亚洲精品久久 | 久久人人爽人人爽人人 | 在线观看视频黄色 | 久久一区二区三区国产精品 | 日韩大陆欧美高清视频区 | 国产夫妻性生活自拍 | 亚洲精品在线视频 | 99999精品视频| 亚洲黄色a | 九九精品视频在线看 | 啪啪午夜免费 | 色吊丝在线永久观看最新版本 | 福利久久 | 99精品一区二区 | 国产成人免费网站 | 黄网av在线 | 91chinese在线| 亚洲一区av| 一区二区三区在线视频111 | 欧美精品久久久久a | 91丨porny丨九色 | 亚洲二级片 | 国产护士在线 | 国产黄色免费观看 | 激情影音先锋 | 亚洲成a人片77777潘金莲 | 毛片在线播放网址 | 99婷婷狠狠成为人免费视频 | 91入口在线观看 | 欧美一区二区三区在线播放 | 欧美另类交在线观看 | 国产高清在线看 | 深爱激情站 | 看黄色91 | 九色视频网 | 伊人中文在线 | 91av视频在线免费观看 | 91免费观看网站 | 四虎国产永久在线精品 | 日本黄色免费在线 | 国产综合片 | 国产精品永久久久久久久久久 | 麻花豆传媒一二三产区 | 国内视频1区 | 日韩欧在线 | 久久国产视频网站 | 日韩欧美视频一区二区 | 欧美美女一级片 | 波多野结衣电影一区二区 | 色狠狠久久av五月综合 | 国产精品欧美日韩 | 亚洲人成在线电影 | 国产护士在线 | 精品亚洲成a人在线观看 | 69av网| 免费在线观看成人小视频 | 在线观看亚洲精品 | 中文字幕丰满人伦在线 | 欧美国产一区在线 | 日韩免费电影在线观看 | 亚洲专区路线二 | 九9热这里真品2 | 精品免费久久久久久 | 99久久精品国产欧美主题曲 | 亚洲做受高潮欧美裸体 | 91日韩精品一区 | 特黄特黄的视频 | 国产91精品高清一区二区三区 | av天天草 | 在线 你懂| 91试看| 成年人网站免费观看 | 色噜噜狠狠狠狠色综合久不 | 成人av教育 | 日本中文在线 | 日韩高清精品一区二区 | 国产专区日韩专区 | 在线观看日韩精品 | 国产高清视频在线 | 国产精品免费视频网站 | 亚洲激情| 久久久久亚洲国产 | 久久亚洲区 | 婷婷视频在线观看 | 久久久久国产精品免费网站 | 麻豆视频免费网站 | 在线视频中文字幕一区 | 国产三级av在线 | 亚洲第一色 | av电影久久| 国产精品婷婷午夜在线观看 | 欧美精品乱码久久久久久 | 不卡av在线 | 欧美激情综合网 | 久久精品一二三区 | 精品国产欧美一区二区 | 97色噜噜| 91成人在线网站 | 丁香伊人网 | 欧美精品一区二区性色 | 天天射色综合 | 永久免费av在线播放 | 免费在线观看成人小视频 | 91漂亮少妇露脸在线播放 | 久久99国产一区二区三区 | 欧美黑人性猛交 | 日本黄色免费在线 | 麻豆小视频在线观看 | 欧美日韩裸体免费视频 | 久久大视频 | .国产精品成人自产拍在线观看6 | 国产情侣一区 | 久久精品视频网站 | 99视频免费 | 国产亚洲成人网 | 成人黄色在线视频 | 国产精品video爽爽爽爽 | 亚洲日本va在线观看 | av在线播放网址 | 免费在线观看污 | 欧美中文字幕久久 | 久久桃花网 | 在线观看视频你懂得 | 伊人久久精品久久亚洲一区 | 免费观看一区二区三区视频 | 日韩欧美在线观看一区二区三区 | 中文在线字幕免费观 | 91视频在线播放视频 | 五月天综合在线 | 日韩电影在线看 | 五月婷婷综合在线 | 国语精品视频 | 四虎影视成人永久免费观看亚洲欧美 | 久久精品99国产精品酒店日本 | 中文字幕在线观看完整版电影 | 亚洲精品动漫成人3d无尽在线 | 久久污视频 | 在线观看国产高清视频 | 91精品一| 国产精品精品久久久久久 | 国产黄色片免费看 | 久久久久综合 | 视频一区二区三区视频 | 免费三级影片 | 97在线看片 | 久久伊人爱 | 在线成人免费av | 成人av网页| 干亚洲少妇| 国产精品欧美久久久久三级 | 亚洲精品观看 | 成片人卡1卡2卡3手机免费看 | 日韩高清在线观看 | 精品国产乱码久久久久久天美 | 国产高清av | 国产69精品久久久久久 | 极品久久久久久久 | 亚洲欧美日韩国产精品一区午夜 | 操操操av | 丁香六月婷婷开心 | 99精品毛片 | 91精品在线免费 | 欧美精品天堂 | 69人人| 在线之家免费在线观看电影 | 国产成人黄色av | 久久久久国产精品免费免费搜索 | 91av亚洲| 日韩中文字幕免费 | 国产人免费人成免费视频 | 2023年中文无字幕文字 | av观看久久久 | 日韩两性视频 | 国产色在线,com | 人成在线免费视频 | 天天曰天天爽 | 午夜视频久久久 | 天堂va在线观看 | 久久资源在线 | 国产精品大尺度 | 久久免费视频在线观看30 | 国产一区二区视频在线播放 | 91精品国自产拍天天拍 | 日本资源中文字幕在线 | 成人影视片 | 91在线观看欧美日韩 | 菠萝菠萝在线精品视频 | 国产四虎在线 | 午夜精选视频 | 波多野结衣久久精品 | 自拍超碰在线 | 99免费在线视频 | 久久精品一 | 69热国产视频 | 911在线| 麻豆91精品91久久久 | 亚洲成人网av | 国产拍揄自揄精品视频麻豆 | 人人看黄色| 精品一区 在线 | 波多野结衣在线观看视频 | 欧美精品久久人人躁人人爽 | 日韩v欧美v日本v亚洲v国产v | 亚洲欧美视频在线播放 | 91中文字幕在线播放 | 高潮久久久久久 | 欧美精品一区二区三区四区在线 | 成人免费视频网站在线观看 | 国产成人亚洲在线观看 | 色福利网 | 丁香婷婷深情五月亚洲 | 国产码电影| 久久久影视 | 成人精品999 | 成年人视频在线观看免费 | 男女靠逼app | 九九视频网 | 免费福利视频导航 | 精品国产乱码久久 | 超碰精品在线观看 | 久久福利影视 | 久久精品91久久久久久再现 | 欧美成人视 | 久久你懂的 | 狠狠干夜夜 | 久久成人精品 | 在线观看av国产 | 色一级片 | 天天操福利视频 | 日韩精品免费一区 | 亚洲精品乱码久久久久 | 波多野结衣理论片 | 992tv在线| 一区二区av | 国产成人一区三区 | 国产精品 亚洲精品 | 亚洲精品2区 | 精品a在线 | 国产精品成人久久 | 国产一区二区三区四区在线 | 麻豆视传媒官网免费观看 | 免费在线观看的av网站 | 亚洲国产欧美在线看片xxoo | 在线观看蜜桃视频 | 99精品在线视频播放 | 久久久人 | 99在线精品免费视频九九视 | 久久综合精品国产一区二区三区 | 亚洲一区免费在线 | 国产精品久久久久久久久久妇女 | 国产不卡在线观看视频 | 久久99这里只有精品 | 最近最新mv字幕免费观看 | 国产午夜三级一区二区三桃花影视 | 免费日韩一区二区三区 | а天堂中文最新一区二区三区 | 日韩成人邪恶影片 | 最新av在线免费观看 | 亚洲欧洲国产精品 | 最近中文字幕第一页 | 激情久久久| 中文字幕视频免费观看 | 香蕉视频久久久 | 久精品在线观看 | 久久天天躁狠狠躁夜夜不卡公司 | 欧美高清成人 | 在线观看国产日韩 | 国产精品va在线观看入 | 久久久久久毛片精品免费不卡 | 808电影免费观看三年 | 久久人操 | 一级片视频在线 | 成人精品福利 | 麻豆传媒视频在线免费观看 | 91丨九色丨91啦蝌蚪老版 | 亚一亚二国产专区 | 色婷婷福利 | 日韩三级视频在线观看 | 成片免费观看视频999 | 四虎国产永久在线精品 | 香蕉久久久久 | 色香天天 | 亚洲第二色 | 国产群p视频 | 国产日韩欧美在线播放 | 久久久久久国产精品美女 | 国产一级片免费视频 | 91精品视频免费 | 久久久久久久久久网站 | 天堂在线一区二区三区 | 久草免费资源 | 婷婷成人亚洲综合国产xv88 | 美女黄网站视频免费 | 国产中文字幕久久 | av线上看 | 涩涩网站在线看 | 日韩国产精品一区 | 四虎www| 欧美另类性 | 精品亚洲欧美一区 | 日韩一区二区在线免费观看 | 亚洲精品黄色在线观看 | 日女人免费视频 | 日韩在线视 | 超碰在线观看99 | 中文字幕a∨在线乱码免费看 | 中文字幕乱在线伦视频中文字幕乱码在线 | 天天躁天天狠天天透 | 日韩国产精品久久久久久亚洲 | 精品在线亚洲视频 | 亚洲毛片视频 | 日韩欧美在线高清 | 国产精品不卡在线播放 | 婷婷丁香九月 | 99精品国产成人一区二区 | 国产黄色片免费看 | 国产精品美女久久久久久久久久久 | 免费观看特级毛片 | 国产精品久久久久一区二区三区共 | 在线 国产 日韩 | 97视频在线免费播放 | 精品一区二区精品 | 国产91勾搭技师精品 | 中文字幕在线不卡国产视频 | 欧美一级免费在线 | 在线播放国产精品 | 999久久国精品免费观看网站 | 亚洲精品乱码久久久久久蜜桃91 | 国产精品白浆视频 | 国产在线欧美 | 欧美性色xo影院 | 国产99久久精品 | 日韩免费三区 | 国产在线观看一区 | 国产成人精品aaa | 成人精品一区二区三区电影免费 | 一区二区三区在线观看 | 久久xxxx| 国产视频在线观看免费 | 国产视频一区在线免费观看 | 免费三级黄色 | 成 人 黄 色 视频播放1 | 欧美综合在线视频 | 激情久久综合网 | 在线导航福利 | 91在线一区| 日韩中字在线观看 | 国产99久久99热这里精品5 | 99热最新地址 | 欧美日韩视频在线播放 | 久草综合视频 | 国产69精品久久久久久久久久 | 亚洲精品国产电影 | 97超碰人人在线 | 国产精品手机在线 | 久久国产精品第一页 | 五月天高清欧美mv | 96精品高清视频在线观看软件特色 | 在线免费观看黄色大片 | 狠狠躁日日躁夜夜躁av | 国产午夜精品免费一区二区三区视频 | 欧美色就是色 | 天天爽天天爽天天爽 | 丁香色综合 | av网站免费看 | 免费看黄色小说的网站 | 园产精品久久久久久久7电影 | 一区三区视频在线观看 | 久久九九免费视频 | 天天夜夜亚洲 | 色婷婷狠狠五月综合天色拍 | 国产精品久久久久久久久久久久 | 国产精品色婷婷视频 | 96精品视频 | 美女网站视频一区 | 久久精品电影网 | 99精品欧美一区二区蜜桃免费 | 亚洲色图美腿丝袜 | 国产精品四虎 | 欧美爽爽爽| 特级a老妇做爰全过程 | 香蕉视频4aa| 日本中文字幕在线电影 | 久草99| 成人国产电影在线观看 | 亚洲精品国产精品国自产 | 久久久国产精品免费 | 91av蜜桃| 日韩欧美视频免费在线观看 | 国产在线观看午夜 | 久久8| 亚洲精品国偷自产在线99热 | 91精品老司机久久一区啪 | 国产精品精品国产色婷婷 | 奇米网777 | 成人av资源站 | 91完整版在线观看 | 国产高清不卡一区二区三区 | 国产精品99久久久久久人免费 | 亚洲激情一区二区三区 | 91久久久久久国产精品 | 99视频一区二区 | 国产中的精品av小宝探花 | 日韩av电影中文字幕在线观看 | 亚洲精品美女在线观看播放 | 99视频免费看 | 激情久久网 | 国产九九热 | 青青草国产精品 | 国产香蕉97碰碰碰视频在线观看 | 欧美日韩精品免费观看 | 日韩在线在线 | 狠狠操电影网 | 国产精品免费观看久久 | 日韩av综合网站 | 久久草av | 久久久久日本精品一区二区三区 | 亚洲永久精品国产 | 欧美一区日韩一区 | 1024手机基地在线观看 | 成人在线观看av | 尤物97国产精品久久精品国产 | 天堂av影院 | 日韩在线小视频 | 欧美a免费| 久九视频 | 久久经典视频 | 国产精品久久久久久久免费观看 | 在线综合色 | 亚洲精品视频二区 | 日韩精品一区二区三区免费观看视频 | 成人午夜黄色影院 | 免费试看一区 | 伊人久久五月天 | 91热爆在线观看 | 国产精品密入口果冻 | 99产精品成人啪免费网站 | 在线观看日韩免费视频 | 黄色录像av | 国产在线观看二区 | 成人影视免费看 | 久久人人爽人人爽人人片 | 超碰在线网| 欧美在线视频二区 | www.色婷婷| 国产成人精品女人久久久 | 国产精品免费一区二区 | 天堂入口网站 | 97人人爽人人 | 久久 在线| 久久久亚洲精品 | 久久精品久久精品久久39 | 国产视频精品免费播放 | 97香蕉久久超级碰碰高清版 | av久久在线 | 成人四虎影院 | 精品福利在线视频 | 国产一级免费视频 | 五月天婷婷综合 | 深夜福利视频一区二区 | 国产美女视频 | 日日夜夜精品视频天天综合网 | 五月婷婷导航 | 久草精品视频在线看网站免费 | 国产一级精品在线观看 | 久久久国产精品人人片99精片欧美一 | 日韩剧 | 天天躁日日 | 五月综合激情 | 国产精品一区在线观看 | 香蕉视频在线免费 | 啪啪免费观看网站 | 国产视频中文字幕在线观看 | 成人永久视频 | 成年人视频在线观看免费 | 欧美精品久久99 | 91黄在线看 | 国产小视频在线免费观看视频 | 96超碰在线 | 999久久久久久久久久久 | 色老板在线视频 | 国产精品乱码久久 | 色美女在线 | 美女视频a美女大全免费下载蜜臀 | 国产99久久久国产精品免费看 | 2021国产视频 | 国产成视频在线观看 | 日本深夜福利视频 | 综合精品久久久 | 五月情婷婷| 日韩欧美精品一区二区 | 中文字幕 影院 | 日韩欧美在线高清 | 色综合网在线 | 成人免费视频播放 | 97视频在线观看视频免费视频 | www操操| 在线播放精品一区二区三区 |