[英]Cannot invoke c++ method from qml: "Property of object is not a function"
我现在试图找到几个小时的解决方案,我完全不知道出了什么问题。
我试图将一个字符串从 QML 提交到 C++ 方法,但出现错误:“qrc:/main.qml:16: TypeError: Property 'test' of object [object Object] is not a function”
有谁知道如何解决这个问题?
非常感谢!
主程序
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include "data.h"
#include <QQmlContext>
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
qmlRegisterType<Data>("com.br.classes", 1, 0, "Data");
Data* myData = new Data();
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("data", myData);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
}
数据.h
#ifndef DATA_H
#define DATA_H
#include <QObject>
#include <QDebug>
class Data : public QObject
{
Q_OBJECT
public:
explicit Data(QObject *parent = nullptr);
Q_INVOKABLE void test(QString strg) {qDebug() << "Received string: " << strg;}
};
#endif // DATA_H
主文件
import QtQuick 2.7
import QtQuick.Window 2.2
import QtQuick.Controls 2.2
import com.br.classes 1.0
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Button {
text: "Press me!"
onClicked: {
data.test("test");
}
}
}
问题可能是您将上下文属性data
命名为已经是Item
的属性。 将该属性称为其他名称,它应该可以工作。
最好在 QML 代码中创建该类的对象,然后使用其函数。
你的 main.qml
import QtQuick 2.7
import QtQuick.Window 2.2
import QtQuick.Controls 2.2
import com.br.classes 1.0
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Data { id: data }
Button {
text: "Press me!"
onClicked: {
data.test("test");
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.