2017-05-22 2 views
1

J'essaie de connecter un signal QML à un emplacement C++. mais quand j'aller de l'avant en utilisant Qt guide, il se produit deux erreurs:impossible de connecter le signal qml et l'emplacement C++

fichier

: /// home/mahomet/Documents/qt_projects/build-Plaq-Desktop_Qt_5_8_0_GCC_64bit-Debug/qrc: /main.qml: No such fichier ou répertoire

QObject :: connect: Impossible de se connecter (null) :: qmlSignal (QString) à PlaqueFinder :: cppSlot (QString)

et voici mon code dans main.cpp:

#include <QGuiApplication> 
#include <QQmlApplicationEngine> 
#include <plaquefinder.h> 
#include <QQuickView> 
#include <QString> 
#include <QObject> 
int main(int argc, char *argv[]) 
{ 
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); 
    QGuiApplication app(argc, argv); 

    QQmlApplicationEngine engine; 
    engine.load(QUrl(QLatin1String("qrc:/main.qml"))); 
    QQuickView view(QUrl::fromLocalFile("qrc:/main.qml")); 
    QObject* item = (QObject*)view.rootObject(); 
    PlaqueFinder plaq; 
    QObject::connect(item, SIGNAL(qmlSignal(QString)), 
         &plaq, SLOT(cppSlot(QString))); 

    return app.exec(); 
} 

comment puis-je résoudre ce problème?

Répondre

0

L'exemple est malheureusement inexact

Essayez ceci:

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 = (QObject*)engine.rootObjects()[0]; 
    PlaqueFinder plaq; 
    QObject::connect(item, SIGNAL(qmlSignal(QString)), &plaq, SLOT(cppSlot(QString))); 
    return app.exec(); 
} 

Par cette ligne, vous créez votre QQuickView et ce n'est pas neccesary de le faire à nouveau en chargeant le même QML.

engine.load(QUrl(QLatin1String("qrc:/main.qml"))); 

Si vous souhaitez connecter un certain signal d'objet nestet, puis utilisez findChild pour obtenir une bonne item