有兩種方法,一種是向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...