該系列文章為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()函式最後,我們編寫乙個.pro專案檔案,其中包含這些檔案和宣告性庫:這是乙個過載函式。
此模板函式在qml系統中註冊c++型別。無法從qml系統建立此型別的例項。
當型別不會被名稱引用時,應使用此函式。具體地說,它必須用於用作屬性繫結左側的c++型別。
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的型別...