2016-11-11 5 views
0

Ich bekomme die "qrc: /main_left.qml: 23: ReferenceError: CppClass ist nicht definiert", wenn ich den folgenden Code ausführen. Dieser Code versucht, die Position eines Rechtecks ​​in einem Fenster zu ändern.QT 5.7 QML - Referenz Fehler: Klasse ist nicht definiert

Main.cpp

#include <QGuiApplication> 
 
#include <QQmlApplicationEngine> 
 

 
#include <QQmlContext> 
 

 
#include "cppclass.h" 
 
#include "bcontroller.h" 
 

 
#include <QApplication> 
 

 
int main(int argc, char *argv[]) 
 
{ 
 
    QApplication app(argc, argv); 
 

 
    //QGuiApplication app(argc, argv); 
 

 
    BController c; 
 

 
    CppClass cppClass; 
 

 
    QQmlApplicationEngine engine; 
 

 
    engine.rootContext()->setContextProperty("CppClass", &cppClass); 
 

 
    engine.load(QUrl(QStringLiteral("qrc:/main_left.qml"))); 
 

 

 
    return app.exec(); 
 
}

main_left.qml

import QtQuick 2.7 
 
import QtQuick.Window 2.2 
 
import QtQuick.Controls 1.2 
 

 
Rectangle { 
 
    visible: true 
 
    width: 640 
 
    height: 480 
 

 
    property int index: 0 
 

 
    Text { 
 
     text: controller.name 
 
     anchors.centerIn: parent 
 
    } 
 
    Image{ 
 
     id:imageLeft 
 
     anchors.fill: parent 
 
     source:"imageLeft.jpg"; 
 
    } 
 

 
    Connections { 
 
     target: CppClass 
 

 
     onPosUpdate: { 
 
      rect.x = currentPos 
 
     } 
 
    } 
 

 
    Button { 
 
     id: button1 
 
     x: 163 
 
     y: 357 
 
     text: qsTr("Change Position") 
 
     anchors.bottom: parent.bottom 
 
     anchors.bottomMargin: 20 
 
     anchors.horizontalCenter: parent.horizontalCenter 
 
     onClicked: CppClass.getCurrentPos() 
 
    } 
 

 
    Rectangle { 
 
     id: rect 
 
     width: parent.width/2 
 
     height: parent.height/2 
 
     color: "transparent" 
 
     border.color: "red" 
 
     border.width: 5 
 
     radius: 10 
 
    } 
 

 
    MouseArea { 
 
     anchors.fill: parent 
 
     onClicked: controller.setName(++index) 
 
    } 
 
}

cppclass.cpp

#include "cppclass.h" 
 
#include <QtQuick> 
 
#include <string> 
 

 
CppClass::CppClass(QObject *parent) : QObject(parent) 
 
{ 
 

 
} 
 

 
CppClass::~CppClass() 
 
{ 
 

 
} 
 

 
void CppClass::getCurrentPos() 
 
{ 
 
    int pos = rand() % 400; 
 
    std::string s = std::to_string(pos); 
 
    QString qstr = QString::fromStdString(s); 
 
    emit posUpdate(qstr); 
 
}

Bitte um Hilfe!

+0

erklärte ich bemerkt mein Fehler. Ich habe vergessen, 'CppClass cppClass;' zu meinem main.cpp hinzuzufügen – mkocabas

Antwort

1

Ich denke, es gibt ein Problem mit CppClassErklärung in Ihrem main.cpp =>CppClass cppClass; und Ihre CppClass Konstruktor ist CppClass::CppClass(QObejct *parent); was bedeutet, dass Sie den Konstruktor Parameter fehlen. Deshalb haben Sie zwei Möglichkeiten

  • 1.: Ihre Klasse Versuchen verwenden, ohne QObject *parent
  • 2.: die QObject* parent für die contructor von CppClass liefern, wenn es in main.cpp
+0

Danke Redanium, Sie fangen den Punkt ein. – mkocabas

Verwandte Themen