c++ qml 数组_不能将动态创建的数组从QML发送到C++作为方法参数

在尝试将动态创建的QML对象数组通过QVariantList传递到C++方法时遇到问题。作者在QML中创建CustomClass对象并存储在JavaScript数组中,然后尝试将该数组作为参数传递给C++的Backend::sendItems方法。然而,方法无法正确获取数组大小,并在打印输出时出现异常行为。寻求解决方案。
摘要由CSDN通过智能技术生成

我正在创建注册的QML对象并将其存储在JavaScript数组中。我想把它们作为

QVariantList

方法参数为C++。下面是代码。然而,首先

Backend::sendItems

方法不打印大小。奇怪的是,它只会打印“ze”,而其他任何东西都不会像线程那样中途中断。我做错什么了?你也可以建议另一种方法来实现我想要的。

主.cpp

#include

#include

#include "backend.h"

#include "custom_class.h"

void register_Qml_types() {

qmlRegisterType("customApi", 1, 0, "Backend");

qmlRegisterType("customApi", 1, 0, "CustomClass");

}

int main(int argc, char **argv)

{

QGuiApplication app(argc, argv);

register_Qml_types();

QQmlApplicationEngine engine;

engine.load(QUrl("qrc:/main.qml"));

return app.exec();

}

自定义\u类.h

#ifndef CUSTOM_H

#define CUSTOM_H

#include

#include

class CustomClass : public QObject

{

Q_OBJECT

Q_PROPERTY(QString name READ name WRITE setName)

public:

CustomClass(QObject* parent = 0)

: QObject(parent)

{}

CustomClass(QString name) {

name_ = name;

}

CustomClass(const CustomClass& item) {

name_ = item.name_;

}

QString name() const {

return name_;

}

void setName(QString name) {

name_ = name;

}

private:

QString name_;

};

Q_DECLARE_METATYPE(CustomClass)

#endif

后端.h

#ifndef BACKEND_H

#define BACKEND_H

#include

#include

#include

#include

#include

#include "custom_class.h"

class Backend : public QObject

{

Q_OBJECT

public:

Backend(QObject* parent = nullptr)

: QObject(parent)

{}

Q_INVOKABLE void sendItems(const QVariantList& list) {

std::cout << "size " + list.size() << std::endl;

list_.clear();

for(const QVariant& variant : list) {

if(variant.canConvert()) {

CustomClass* custom = new CustomClass(variant.value());

list_.append(custom);

std::cout << "converted" << std::endl;

}

}

}

private:

QList list_;

};

#endif

主.qml

import QtQuick.Window 2.11

import QtQuick.Controls 1.4

import QtQuick 2.11

import customApi 1.0

Window {

id: root

visible: true

width: 500

height: 500

property var items: []

Backend {

id: backend

}

Row {

Button {

text: "button1"

onClicked: {

var item1 = Qt.createQmlObject("import customApi 1.0; CustomClass { name: \"first-name\" }", root);

var item2 = Qt.createQmlObject("import customApi 1.0; CustomClass { name: \"second-name\" }", root);

items.push(item1);

items.push(item2);

}

}

Button {

text: "button2"

onClicked: {

backend.sendItems(items);

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值