2017-05-08 29 views
1

に私は次のコードで信号接続を動作させることはできません。私は具体的には、信号をcppスロットに接続し、コンテキストを設定しないでこれを行うことを望みます。問題はそうだと思いますC++とQML:接続QML信号C++スロット

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"); 
関連する問題