QT 5.7 QML - 参考错误:未定义类 [英] QT 5.7 QML - Reference Error: Class is not defined

查看:48
本文介绍了QT 5.7 QML - 参考错误:未定义类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我运行以下代码时,我得到qrc:/main_left.qml:23: ReferenceError: CppClass is not defined".这段代码试图改变一个矩形在窗口中的位置.

I get the "qrc:/main_left.qml:23: ReferenceError: CppClass is not defined" when I run the below code. This code tries to change the position of a rectangle in a window.

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

ma​​in_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);
}

请帮忙!

推荐答案

我认为你的 main.cppCppClass declaration 有问题code> => CppClass cppClass; 和你的 CppClass 构造函数是 CppClass::CppClass(QObejct *parent); 这意味着你错过了构造函数参数.所以,你有两种可能

I think there is a problem with CppClass declaration in your main.cpp => CppClass cppClass; and your CppClass constructor is CppClass::CppClass(QObejct *parent); which means that you are missing the constructor parameter. Therefore,you have two possibilities

  • 1st :尝试在没有 QObject *parent
  • 的情况下使用您的类
  • 2nd:在main.cpp中声明时,为CppClass的构造函数提供QObject* parent
  • 1st : Try use your class without QObject *parent
  • 2nd: provide the QObject* parent for the contructor of CppClass when declaring it in main.cpp

这篇关于QT 5.7 QML - 参考错误:未定义类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆