[英]C++ and QML: Connect QML Signal to C++ Slot
我無法在以下代碼中使用信號連接。 我特別想通過將信號連接到cpp插槽而不設置上下文來做到這一點。 我想問題是
item->findChild<QObject*>("signalItem");
沒有找到合適的對象? 這里是相關的代碼文件:
main.cpp中:
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include "include/myclass.h"
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QLatin1String("qrc:/main.qml")));
QObject * item = engine.rootObjects().value(0);
QObject * myObject= item->findChild<QObject*>("signalItem");
MyClass myClass;
QObject::connect(item, SIGNAL(testSignal()),&myClass,SLOT(cppSlot()));
return app.exec();
}
main.qml:
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.0
ApplicationWindow {
visible: true
width: 800
height: 460
Page1 {
id: page1
visible: true
}
}
Page1.qml:
import QtQuick 2.7
import QtQuick.Window 2.2
Item {
width: 800
height: 460
id: signalItem
objectName: "signalItem"
signal testSignal()
CustomButton {
id: cppSignalButton
x: 14
y: 55
buttonText: "Test CPP Signal"
onButtonClicked: {
signalItem.testSignal();
}
}
}
因為您要連接item
(main.qml)而不是myObject
如果這樣做,它將起作用:
QObject::connect(myObject, SIGNAL(testSignal()),&myClass,SLOT(cppSlot()));
實際上,您還應該添加檢查,以確保從該函數返回的值不為null:
QObject * item = engine.rootObjects().value(0);
QObject * myObject= item->findChild<QObject*>("signalItem");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.