QML于C++交互之信号与槽(signal&slot )
connect c++ SIGNAL with QML SLOT
简介
QML 与 C++ 混合编程时,总结了一下qml和c++互相直接调用、及信号与槽连接 的几种情况,详细使用情况看示例代码
所有的QML对象都派生自QObject,不管是可视对象还是集成在c++程序中的对象。一旦QML对象被创建,就可以集成到c++中,读写属性,调用其方法和接收其信号
连接qml中信号与函数
Component.onCompleted:
{
//qml 信号连接 qml函数
sendMessageSigal.connect(getMessage);
}
连接 qml中函数与c++中信号
Connections
{
//qml 连接 c++ 信号
target:interaction
onConnectcppsignal:
{
label2.text=strMsg;
}
}
qml中直接调用c++函数
//on<Signal>
onClicked:
{
//qml 调用 c++函数
interaction.test();
}
连接c++中函数与qml中信号
//c++ 函数连接 qml信号
QObject* quitButton = root->findChild<QObject*>("quitButton");
if (quitButton)
{
QObject::connect(quitButton, SIGNAL(clicked()), &app, SLOT(quit()));
}
c++中直接调用qml中函数
QObject* textLabel = root->findChild<QObject*>("objNameL4");
if (textLabel)
{
//c++ 直接调用qml函数
QMetaObject::invokeMethod(textLabel, "setL4text");
}
c++连接信号与槽函数
//连接c++ 信号与槽
//QObject::connect(this,SIGNAL(valueChanged(int)),this,SLOT(setValue(int))); //qt4 语法
QObject::connect(this,&CInteraction::valueChanged,this,&CInteraction::setValue); //qt5 新语法
c++ 连接信号与普通函数
//信号连接普通函数
QObject::connect(this,&CInteraction::valueChanged,outPutInfo);
c++ 连接信号与lambda函数
// QObject::connect(this,&CInteraction::valueChanged,[=](int value){ qDebug()<<"lambda called, value:"<<value<<"\n"; });
QObject::connect(this,&CInteraction::valueChanged,[=,this](){ qDebug()<<"lambda called, value:"<<this->value_<<"\n"; });
代码
参考
http://blog.csdn.net/booirror/article/details/26973611
https://www.devbean.net/2012/04/signals-slots-in-qt5/
http://doc.qt.io/qt-5/qtqml-syntax-signals.html
http://doc.qt.io/qt-5/qtqml-cppintegration-interactqmlfromcpp.html#accessing-loaded-qml-objects-by-object-name
- http://blog.csdn.net/x356982611/article/details/53871748