使用QJsEngine在Qt中注册自定义类型
Register custom type in Qt with QJsEngine
我有一个名为LObject的自定义类,它有一个方法"测试";我想打电话。我在QJSEngine中注册了一个方法,该方法返回LObject的一个实例。我在执行方法时收到错误消息:
"Error: Unknown method return type: LObject"
我试图用Q_DECLARE_METATYPE注册我的类型,但之后我无法调用LObject的方法。
怎么做?
编辑:3个文件的最小示例
server.h:
#ifndef SERVER_H
#define SERVER_H
#include <QObject>
#include <QString>
#include <QQmlEngine>
#include <QQuickView>
#include <QQmlContext>
#include <qqml.h>
class TObject : public QObject
{
Q_OBJECT
QML_ELEMENT
public :
TObject(QObject * parent = nullptr, const QString & data = "") : QObject(parent) ,m_data(data){}
TObject(const TObject & other) : QObject() ,m_data(other.m_data) {}
~TObject(){};
TObject& operator=(const TObject & other) { m_data = other.m_data;return *this;}
Q_INVOKABLE QString getData() { return m_data;}
Q_INVOKABLE void setData(const QString & data) {m_data = data;}
private :
QString m_data;
};
class Server : public QObject
{
Q_OBJECT
public :
QQmlEngine * newEngine()
{
QQmlEngine * ret = new QQmlEngine(this);
ret->rootContext()->setContextProperty("Server",this);
return ret;
}
Q_INVOKABLE TObject newTObject() { return TObject();}
};
Q_DECLARE_METATYPE(TObject)
#endif // SERVER_H
main.cpp:
#include "server.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Server s;
QQmlEngine * e = s.newEngine();
QQuickView view(e,nullptr);
view.setSource(QUrl("test.qml"));
view.show();
return a.exec();
}
test.qml
import QtQuick 2.9
import QtQuick.Window 2.9
Text
{
function test()
{
let t = Server.newTObject() //test.qml:8: Error: Unknown method return type: TObject
t.setData("TEST")
return t.getData()
}
text : test();
}
已解决!
qmlRegisterInterface<TObject>("TObject",1);
然后这些方法必须返回一个TObject*。
注册QMetaType::qRegisterMetaType应该可以解决您的问题。简而言之,QT元对象需要这样才能将返回类型的名称与类名相匹配:
qRegisterMetaType<TObject>();
相关文章:
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- C++自定义比较函数
- 如何比较自定义类的std::变体
- std::设置自定义比较器
- 如何正确实现和访问运算符的各种自定义枚举器
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 自定义先决条件对移动分配运算符有效吗
- 使用VS Code和CMake Tools运行自定义命令
- 如何创建从Maya(或类似程序)到虚幻引擎的自定义数据导出插件
- std::ranges::elements_view,用于自定义类似元组的数据
- 使用QJsEngine在Qt中注册自定义类型
- 在Qt中注册自定义元类型的别名类型
- 在Python中编写和注册自定义TensorFlow OP
- 如何在英特尔 SGX 中注册自定义例外
- 如何在 ATL/WTL 对话框中注册自定义控件
- 在microtik Winbox的注册表编辑器中添加自定义协议
- 没有安装module[]——为QML注册自定义c++包装器
- 有没有一种更干净的方式来注册Qt自定义事件
- 如何使用自定义注册系统注册dll,并查看导入dll的可执行文件的PE