C QML混合程式設計官方案例(一)

2021-10-17 03:41:10 字數 2279 閱讀 6884

該系列文章為qt自帶案例writing qml extensions with c++ 的中文翻譯。下面為正文

extending-qml/chapter1-basics

擴充套件qml時的乙個常見任務是提供乙個新的qml型別,該型別支援內建qt quick type 所提供的功能之外的一些自定義功能。例如,可以這樣做來實現特定的資料模型,或者提供具有自定義繪製和繪製功能的型別,或者訪問無法通過內建qml功能訪問的系統功能(如網路程式設計)。

在這個教程中,我們將展示如何利用c++的類在qt quick module 中 擴充套件qml的。最終成果將是乙個簡單的餅圖顯示,它由多個自定義qml型別實現,這些型別通過繫結和訊號等qml特性連線在一起,並以外掛程式的方式在qml中執行。

首先,讓我們建立乙個名為「piechart」的新qml型別,它有兩個屬性:name和color。我們將使其在名為「charts」的可匯入型別命名空間中可用,版本為1.0。

我們希望piechart在qml中呈現出如下**:

import charts 1.0

piechart

做到這點,我們需要c++的類 封裝 piechart型別和他的兩個成員變數,且由於qml廣泛使用了qt的元物件系統,因此這個新類必須:

piechart.h

#include

#include

class

piechart

:public qquickpainteditem

;

​ 這個類 繼承自 qquickpainteditem 因為我們希望在使用qpainter api執行繪製操作時重寫qquickpainteditem::paint()。如果類只是表示某種資料型別,並且不是實際需要顯示的項,那麼它可以簡單地從qobject繼承。或者,如果我們想要擴充套件現有的基於qobject的類的功能,它可以從該類繼承。或者,如果我們想要建立乙個不需要使用qpainter api執行繪圖操作的可視專案,我們可以只建立qquickitem的子類。

​ piecht類使用q_property巨集定義兩個屬性(name和color),並覆蓋qquickpainteditem::paint()。cpp中的類實現只根據需要設定並返回m_name和m_color值,並實現paint()來繪製乙個簡單的餅圖。它還會關閉qgraphicsitem::itemhasnocontents標誌以啟用繪製:

piechart::

piechart

(qquickitem *parent)

:qquickpainteditem

(parent)..

.void piechart::

paint

(qpainter *painter)

import qtquick 2.0

item

text

text: apiechart.name

}}

#include

#include

intmain

(int argc,

char

*ar**)

這個對qmlregistertype()的呼叫在名為「charts」的型別命名空間中將piechart型別註冊為名為「piehart」的型別,版本為1.0。

關於qmlregistertype()函式

這是乙個過載函式。

此模板函式在qml系統中註冊c++型別。無法從qml系統建立此型別的例項。

當型別不會被名稱引用時,應使用此函式。具體地說,它必須用於用作屬性繫結左側的c++型別。

最後,我們編寫乙個.pro專案檔案,其中包含這些檔案和宣告性庫:

qt += qml quick

headers += piechart.h

sources += piechart.cpp \

main.cpp

resources += chapter1-basics.qrc

destpath = $$[qt_install_examples]/qml/tutorials/extending-qml/chapter1-basics

target.path = $$destpath

qml.files = *.qml

qml.path = $$destpath

installs += target qml

c python混合程式設計(一)

方法一 通過c api介面 參考 總結 這種方法可以實現簡單的python的 函式 類的呼叫,但是當 工程較大時,比如乙個demo.py 中匯入了多個模組,如下所示,deep sort資料夾下的 均為自己編寫,這種情況下在c 下呼叫python 的時候就會出現from deep sort impor...

關於swift,OC,C 混合程式設計(一)

在寫cocos2dx引擎遊戲時,試驗了一下swift和c 的混編,swift可以與oc混編,c 可以和oc混編,那麼是不是c 也可以呼叫swift的 呢?大家都知道,swift剛剛面世,還有很多問題存在,儘管相對於oc來說,swift語言更加簡便,但是同時問題也不少,所以我們藉此來 混編中具體會出現...

QML和C 混合程式設計 (一)

本教程介紹在c 應用程式中擴充套件使用qml。著重介紹了qml的核心特性 如屬性 訊號和槽。還有通過外掛程式來銷毀這些擴充套件。翻譯來自qt的官方的英文教程。qt qml 提供了一些api,使得可以通過c 進行擴充套件。你可以自行書寫這些擴充套件,來增加到你自己的qml型別中。簡而言之,qml的型別...