Qml呼叫C 方法,屬性,訊號,槽

2021-10-14 03:35:13 字數 2898 閱讀 6138

有兩種方法,一種是向qml註冊c++類,把這個類當做qml元件使用。二種是向qml註冊c++例項物件,在qml中直接使用這個物件。

(1)向qml註冊c++類

建立乙個類,定義屬性和方法,訊號,槽

#ifndef qmlobj_h

#define qmlobj_h

#include

#include

class

qmlobj

:public qobject

//功能為傳送訊號

//給屬性新增qml訪問方法,

intgetage()

void

setage

(int a)

signals:

void

agechanged()

;public slots:

void

funslots()

private

:int age;};

#endif

// qmlobj_h

註冊c++類

#include

#include

#include

#include

#include

#include

#include

"qmlobj.h"

intmain

(int argc,

char

*ar**)

在qml檔案裡面這樣寫

import qtquick 2.9

import qtquick.controls 2.2

//這裡引入模板

import qmltestobject 1.0

id:root

visible:

true

width:

640 height:

480 title:

qstr

("scroll"

)//寫乙個qml的訊號,然後繫結到c++

signal qmlsignal

button

}//也可以把c++物件設定給qml的屬性,

property var cppobj : qobj

//用cppobj去呼叫age屬性

property int qmmlage: cppobj.age

//c++檔案這樣使用,當做乙個qml物件

qmlobj

}//元件載入完成

component.oncompleted:

//定義槽函式

function soltfun()

}

這樣就完成了

(2)向qml註冊c++例項物件

建立乙個類,把這個類的乙個例項物件註冊給qml

用qmlregistersingletontype()註冊

#ifndef singletonobj_h

#define singletonobj_h

#include

#include

"qmlobj.h"

class

singletonobj

:public qobject

private

: qmlobj *_qmlobj =

newqmlobj()

;};#endif

// singletonobj_h

在main方法中註冊

#include

#include

#include

#include

#include

#include

#include

"qmlobj.h"

#include

"singletonobj.h"

#include

static qobject*

qmlglobalsingletonfactory

(qqmlengine*

, **sengine*

)int

main

(int argc,

char

*ar**)

在qml中這樣使用

import qtquick 2.9

import qtquick.controls 2.2

import qtlocation 5.6

import qtpositioning 5.6

//這裡引入模板

//import qmltestobject 1.0

import singleobj 1.0

id:root

visible:

true

width:

640 height:

480 title:

qstr

("scroll"

)//把qmlobj物件賦值給qml的屬性qobj,qobj其實是c++物件

property var qobj: singleobj.qmlobj

//qobj其實是c++物件,所以可以使用物件的屬性,方法等

property int age: qobj.age

//寫乙個qml的訊號,然後繫結到c++

signal qmlsignal

button

}//元件載入完成

component.oncompleted:

//定義槽函式

function soltfun()

}

QML與C 中訊號和槽的使用

class gemini public q object gemini類中的訊號begin 和槽dosomething 都可被qml訪問。槽必須宣告為public或protected。在c 中使用時候需要emit關鍵字,但是在qml中就是普通函式,用法跟函式一樣,訊號處理器形式為onsignal。訊...

C 方法,屬性,和事件

1.7.3 方法 方法是乙個執行可以由對像或類完成的計算或行為的成員。方法有乙個形式引數列表 可能為空 乙個返回數值 或void 並且可以是靜態也可以是非靜態。靜態方法要通過類來訪問。非靜態方法,也稱為例項方法,通過類的例項來訪問。例子 using system public class stack...

C 訊號槽使用方法

c 訊號槽使用方法 1.為什麼要使用訊號槽.a.可以將事件源和訂閱處理者分開 b.降低耦合性 事件源只需要向外界暴露最少的資訊,內部改變不影響外部行為 c.降低 複雜性,將事件不同的處理 分散到各個訂閱者內部。2.如何使用資訊槽 a.包含標頭檔案 include sigslot.h using na...