QML与C++交互
Q_INVOKABLE
说明:
使用Q_INVOKABLE宏定义来修饰成员函数,目的在于被修饰的成员函数能够被元对象系统所唤起。
方法一
.h文件
Q_INVOKABLE void bindWindow(int x,int y,int w,int h);
.cpp文件:
正常书写C++代码
main.cpp文件:
需包含头文件:#include <QQmlContext>
包含类头文件时,如果此类代码放置于其他文件夹,则头文件需要加上文件夹名:#include "OtherSource/m_setwindow.h"
auto root_context = engine.rootContext();
root_context->setContextProperty("$mwind",&wind);
.qml文件
Button {
id: treasure
text: qsTr("珍宝")
font.bold: true
font.pointSize: 20
width: parent.width
height:parent.width
Image {
id: zb_btn
source: "../Image/LB.png"
width: parent.width
height: parent.height
opacity: 0.3
}
//点击鼠标调用
onClicked: $mwind.bindWindow(parent.parent.x,
parent.parent.y,
parent.parent.width,
parent.parent.height)
}
方法二
.h文件中用Q_INVOKABLE
修饰完成员函数后;
main.cpp
qmlRegisterType<ProConModel>("an.qt.ProConModel",1,0,"ProConModel");
main.qml
直接使用id可以调用被Q_INVOKABLE
修饰过的公开或者保护的成员函数;
import an.qt.ProConModel 1.0
ProConModel{id:cxx_PCM}
Component.onCompleted: {
cxx_PCM.mPrintf()
}
信号与槽
1.使用方法一
2.cpp中定义一个信号void signalPrintf(QString);
;
3.Q_INVOKABLE void mPrintf();
该函数在UI界面调用时,会打印字符串的同时抛出一个信号;
void Sqlite::mPrintf()
{
QString str("打印测试");
emit signalPrintf(str);
qDebug()<<str;
}
4.qml中写法,让程序一运行就将信号与槽函数绑定;
function slotPrintf(str){
text_Del.text = str
}
Component.onCompleted: {
$DB.signalPrintf.connect(slotPrintf)
}
5.当点击创建按钮时,调用第3步函数并打印打印测试
;
Button{//创建
width: 60
height: 30
Text {
text: qsTr("创建")
font.bold: true
font.pointSize: 10
anchors.centerIn: parent
}
onClicked: {
$DB.mPrintf()
}
}
6.同时qml的槽函数会被执行并更改删除按钮的text文本;