一, 在qml中訪問c++類和物件
1)匯出型別到qml
第一步 ,實現乙個c++類: class a
實現a的一些條件:
1,從 qobject 或 qobject 的派生類繼承
2,使用 q_object 巨集
(這兩個條件是為了讓乙個類能夠進入 qt 的元物件系統(meta-object system)中,只有使用元物件系統,乙個類的某些方法或屬性才可能通過字串形式的名字來呼叫,才具有了在 qml 中訪問的基礎條件。)
3,類的成員函式使用 q_invokable 巨集來修飾,讓該方法被元物件系統呼叫, qml 中用 $.$ 來訪問.
定義: q_invokable
void
fun();
qml中, a.fun();
4, 列舉型別用q_enums巨集, qml 中用 $.$ 的形式來訪問
q_enums(item)
enum item;
qml中, a.x;
5, q_property 巨集定義可通過元物件系統訪問的屬性,可以在 qml 中訪問、修改,也可以在屬性變化時發射特定的訊號。
q_property(
qstring name
read name write setname)
第二步: 註冊類a到qml型別 (註冊動作要放在 qml 上下文建立之前)
qmlregistertype(
"an.qt.a"
, 1, 0,
"a"); //引數分別是包名,主版本,次版本,類名
第三步: 在qml中匯入註冊的型別a
import
an.qt.a 1.0
第四步:
在 qml 中建立 a的例項
rectangle
}2)匯出物件到qml:
上面是匯出qml 型別在 qml中使用,還可以把 c++ 中建立的物件傳遞到 qml 環境中,然後在 qml 環境中訪問
viewer.rootcontext()->setcontextproperty("objecta"
, new
a);
在qml中使用物件objecta:
component.oncompleted:
匯出的物件可以直接使用,它的訊號、槽、可呼叫方法(使用 q_invokable 巨集修飾的方法)、屬性都可以使用,只是不能通過類名來引用列舉值.
二,在c++使用呼叫qml物件
1, 實現qml物件 objectb.qml
import
qtquick 2.0
import
qtquick.controls 1.1
rectangle
button
} 2, c++中使用物件
int
main(
intargc,
char
*argv)
qobject *textlabel = rootitem->findchild("textlabel"
);
if
(textlabel)
return
}
原博文:
qml與C 的互動
簡單說下我自己對qml與c 的互動的理解流程 1.介面互動,很多新手可能會寫qt介面或者qml介面,但想要把qml與c 結合起來就一臉矇逼了。首先我提供個簡單的方法實現qml和c 的介面互動,首先引入幾個重要的標頭檔案,當然在專案檔案中需要加qt quickwidgets才能引用以下標頭檔案 inc...
QML如何與C 互動
大家都知道,qml作為構建介面的語言是非常簡潔的,但是介面的後台有些時候是經常要與c 互動的,那麼這個時候,如何與c 進行互動就尤為重要了,在這裡就需要用到 template int qmlregistertype const char uri,int versionmajor,int versio...
qml與C 的互動
qml與c 的互動,簡單說下我自己對qml與c 的互動的理解流程 1.介面互動,很多新手可能會寫qt介面或者qml介面,但要把qml與c 結合起來就一臉矇逼了。首先我提供個簡單的方法實現qml和c 的介面互動。首先引入幾個重要的標頭檔案 include include include widget ...