【发布时间】:2014-09-12 07:41:57
【问题描述】:
myclass.h
#ifndef MYCLASS_H
#define MYCLASS_H
#include <QDebug>
#include <QObject>
class MyClass : public QObject
{
public:
MyClass();
public slots:
void buttonClicked();
void buttonClicked(QString &in);
};
#endif // MYCLASS_H
myclass.cpp
#include "myclass.h"
MyClass::MyClass()
{
}
void MyClass::buttonClicked()
{
// Do Something
}
void MyClass::buttonClicked(QString &in)
{
qDebug() << in;
}
main.cpp
#include <QApplication>
#include <QQmlApplicationEngine>
#include <myclass.h>
#include <QQmlContext>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:///main.qml")));
MyClass myClass; // A class containing my functions
// Trying to "SetContextProperty" as I saw people do it to achieve C++/QML connection
QQmlContext * context = new QQmlContext(engine.rootContext());
context->setContextProperty("_myClass", &myClass);
return app.exec();
}
我想在 myClass 类中使用一个函数,该函数在单击 QML 按钮时采用 QString 参数..
当我编译和运行时.. 一切都很顺利。 但是当我点击按钮..它在调试器中显示这个错误:
qrc:///main.qml:80: ReferenceError: _myClass is not defined
~>“我的 QML 文件中的第 80 行”:
74: MouseArea {
75: id: mouseArea1
76: anchors.fill: parent
77: hoverEnabled: true;
78: onEntered: { rectangle1.border.width = 2 }
79: onExited: { rectangle1.border.width = 1 }
80: onClicked: _myClass.buttonClicked("Worked?")
81: }
编辑:(至于错误导致编译错误)
正如 @Jairo 所建议的,所有类都必须继承自 QObject。
仍在寻找解决我的主要问题的方法。
【问题讨论】:
-
它给出的错误是什么?
-
@lthreed 对不起老兄,我已经编辑了问题并添加了所有必要的信息。
-
来吧...您甚至没有提到哪一行给出了错误,也没有包括您的班级...错误一定来自您的班级。
-
MyClass 是基于 QObject 类的吗?
-
@Jairo 是的,就是这样! myclass 应该继承自 QObject。但不幸的是,这也不能解决主要问题..如何更改代码以使其可以使用 QML 中的 C++ 函数(
myClass.buttonClicked(QString)),例如:[_myClass.buttonClicked("JJJ")]?谢谢:)