QML和C++相互調用總結__C++

來源:互聯網
上載者:User

 

首先C++的類必須繼承自QObject,而且在。H裡面必須聲明Q_OBJECT

 

Q_ENUMS(GenerateAlgorithm)     //聲明一個枚舉類型到qml裡面用                                                        GenerateAlgorithm是一個枚舉類型,要在QML使用必須使用Q_ENUMS聲明

Q_PROPERTY(QColorcolorREADcolorWRITEsetColorNOTIFYcolorChanged)        //聲明一個屬性,在QML裡面用

這裡是聲明一個類的屬性,屬性名稱是color讀取就是color寫這個屬性就是調用setcolor函數。在QML裡面直接是用.color來調用這個屬性和裡面的text等一個樣。

Q_INVOKABLEvoidsetAlgorithm(GenerateAlgorithmalgorithm);

這個聲明一個函數,可以直接在QML裡面調用,直接使用. setAlgorithm調用這個函數。

colorMaker.setAlgorithm(ColorMaker.LinearIncrease);這個是QML裡面的調用這個函數的方式。

 

然後再C++裡面的訊號和槽可以直接在QML裡面調用而不需要特別的聲明。

signals:

    voidcolorChanged(constQColor&color);

    voidcurrentTime(constQString&strTime);

 

publicslots:

    voidstart();

    voidstop();

例如上面是C++裡面定義的訊號和槽在QML裡面調用如下:

onClicked:{

            colorMaker.stop();     //槽可以像函數一樣直接調用

        }

訊號使用如下方式捕捉:

Connections{

        target:colorMaker;

        onColorChanged:{

            colorRect.color=color;

             console.log("Coloris",color);

        }

}

 

Component.onCompleted:的作用像是建構函式一樣,就是一個初始化函數。

 

在main函數裡面需要註冊c++類如下:

  qmlRegisterType<ColorMaker>("an.qt.ColorMaker",1,0,"ColorMaker");

這樣在QML裡面加入標頭檔importan.qt.ColorMaker1.0就可以調用這個類了。

還有一種方法註冊c++類為一個屬性沒有深入研究。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.