2017-05-08 1 views
1

다음 코드에서 신호 연결을 사용할 수 없습니다. 나는 특히 신호를 cpp 슬롯에 연결하고 컨텍스트를 설정하지 않고이 작업을 수행하려고합니다. 문제가 있다고 생각합니다C++ 및 QML : C++ 슬롯에 QML 신호 연결

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 : 당신이 item

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(); 
     } 
    } 
} 

답변

2

연결되어 있기 때문에 (main.qml) 대신 myObject

이렇게하면

, 그것은 작동합니다

QObject::connect(myObject, SIGNAL(testSignal()),&myClass,SLOT(cppSlot())); 

에서 반환 된 값 함수가 null가 아닌 것을 경우 실제로 당신은 또한 검사를 추가해야합니다 :

QObject * item = engine.rootObjects().value(0); 
QObject * myObject= item->findChild<QObject*>("signalItem");