[QT]Qml和C++传输QVariantMap格式的数据

C++中定义类,QML中接收,传输数据类型为QVariantMap


QML(Qt Meta-Object Language)是Qt框架中的一种声明性语言,用于描述图形界面及其交互行为。它的由来可以追溯到Qt Quick的开发过程。Qt Quick是一种基于QML的用户界面框架,旨在提供一种直观、明确、易于开发和易于维护的方式来创建现代化的用户界面。在开发Qt Quick时,开发人员意识到需要一种声明性语言来描述界面,这就成为了QML的诞生动机。QML的语法借鉴了JavaScript和CSS的语法,使得开发者可以很容易地理解和编写代码。同时,QML的开发方式也符合现代GUI开发的趋势,可以更好地满足用户对于高效、互动和优美的用户界面的需求。

场景

需要在C++类和QML中进行数据传输,传输的数据为QVariantMap类型。

定义C++类

头文件

#include <QObject>
#include <QVariant>
class maphandler : public QObject
{
    Q_OBJECT
public:
    explicit maphandler (QObject *parent = nullptr);

signals:
    void sendMap(QVariant map);
public slots:
    void handleMap(QVariant map);

};

实现

#include <QDebug>
maphandler::maphandler (QObject *parent)
    : QObject{parent}
{

}
void maphandler::handleMap(QVariant map)
{
    QVariantMap vmap = map.toMap();
    qDebug() << "Map size: " << vmap.size();
    for(auto key: vmap.keys())
    {
      qDebug() << "Key: " << key << ", Value: " << vmap[key];
    }
}

注意这里不要将这个类直接写到main.cpp中,会报错。

main.cpp

int main(int argc, char *argv[])
{
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    maphandler handler;
    engine.rootContext()->setContextProperty("mapHandler", &handler);
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    QVariantMap map;
    map["key1"] = "value1";
    map["key2"] = "value2";

    QVariant vMap = QVariant::fromValue(map);

    emit handler.sendMap(vMap);


    return app.exec();
}

main.qml

import QtQuick 2.15
import QtQuick.Window 2.15

Window {
  width: 640
  height: 480
  visible: true
  title: qsTr("QVariantMap Example")

  Connections {
    target: mapHandler

    onSendMap: {
      mapHandler.handleMap(map)
    }
  }
}

完整例子

gitee
仅作为参考,一起学习和进步。
本文章部分内容使用claude.ai提供的材料

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值