1、Connections
import QtQuick
import QtQuick.Controls
import MyObj 1.0
Window {
id: window
width: 480
height: 480
visible: true
title: qsTr("Hello World")
MyObject {
id: myobj
}
Button {
id: btn
signal qmlSig(int i, string s)
onClicked: {
qmlSig(10, "Zhang San")
}
}
Connections {
target: btn
function onQmlSig(i, s) {
myobj.cppSlot(i, s)
}
}
}
2、Component.onCompleted
import QtQuick
import QtQuick.Controls
import MyObj 1.0
Window {
id: window
width: 480
height: 480
visible: true
title: qsTr("Hello World")
MyObject {
id: myobj
}
Button {
id: btn
signal qmlSig(int i, string s)
onClicked: {
qmlSig(10, "Zhang San")
}
Component.onCompleted: {
qmlSig.connect(myobj.cppSlot)
}
}
}
3、在CPP中连接
#include"myobject.h"
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QScreen>
#include <QObject>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
qmlRegisterType<MyObject>("MyObj", 1, 0, "MyObject");
QObject::connect(
&engine,
&QQmlApplicationEngine::objectCreationFailed,
&app,
[]() { QCoreApplication::exit(-1); },
Qt::QueuedConnection);
engine.loadFromModule("updatePublisher", "Main");
//engine加载完成后
auto list = engine.rootObjects();
auto button = list.first()->findChild<QObject *>("button");
QObject::connect(button, SIGNAL(qmlSig(int, QString)), MyObject::getInstance(), SLOT(cppSlot(int, QString)));
return app.exec();
}