gpt4 book ai didi

c++ - 来自 C++ 的 QML 回调,自定义类型作为参数

转载 作者:行者123 更新时间:2023-11-30 04:20:02 25 4
gpt4 key购买 nike

我希望能够使用自定义类的实例作为参数从 C++ 调用 QML 函数,然后从 QML 操作该实例。

这是我到目前为止所做的:

数据.h

class Data : public QObject
{
Q_OBJECT
Q_PROPERTY(QString text READ text WRITE setText)

public :
Data() : QObject(), _text("Foo") { }
virtual ~Data() { }
Data(const Data & other) { _text = other._text; }

QString text() const { return _text; }
void setText(const QString & text) { _text = text; }

private :
QString _text;
};

Q_DECLARE_METATYPE(Data);

main.cpp

#include "Data.h"

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

Data callBackData;
QQmlEngine engine;

QQmlComponent rootComponent(&engine, QUrl::fromLocalFile("CallBack.qml"));
QObject * rootObj = rootComponent.create();

QMetaObject::invokeMethod(rootObj, "callMeBack",
Q_ARG(QVariant, QVariant::fromValue(callBackData)));

return app.exec();
}

回调.qml

import QtQuick 2.0

Item {
function callMeBack(data) {
console.log(data.text)
}
}

控制台输出"Undefined" .我做错了什么吗?

将函数体更改为 console.log(data) 时它输出 "QVariant(Data)"那么为什么我不能访问数据的文本属性?

我尝试注册 Data使用 qmlRegisterType<Data>(); 作为 QML 类型但这并没有改变任何东西。

最佳答案

尝试传递一个 QObject 指针:

Data *callbackData = new Data;
...
QMetaObject::invokeMethod(rootObj, "callMeBack",
Q_ARG(QVariant, QVariant::fromValue(callBackData)));

未测试,但应该可以工作(QML 识别 QObject* 类型)。

关于c++ - 来自 C++ 的 QML 回调,自定义类型作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15429669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com