qml向Qt的C++传数组参数

2023-11-07

我们都知道qml和C++可以进行交互,但数据交互的过程中,一般只限于内置类型,比如int, bool,double等,如果是json或数组由C++传给qml,qml是可以解析的,但如果是qml传数组给C++呢,该如何传参及解析数组参数呢,C++中通过QVariantList来进处理参数处理,qml参数封装如下:

var infoArray = [];//先清空
infoArray.push("productVersion");
infoArray.push("productType");
infoArray.push("kernelType");
infoArray.push("currentCpuArchitecture");

C++解析:

QJsonObject SystemService::getSystemInfo(const QVariantList &list)
{
    for(int i = 0; i < list.count(); ++i)
    {
        QString typeName = list[i].toString();
  
    }

    return jsonObject;
}

完整的示例代码如下:

#ifndef SYSTEMSERVICE_H
#define SYSTEMSERVICE_H

#include <QObject>
#include <QSysInfo>
#include <QJsonObject>
#include <QVariantList>

class SystemService: public QObject
{
    Q_OBJECT

public:
    SystemService(QObject *parent = nullptr);

    Q_INVOKABLE QJsonObject getSystemInfo(const QVariantList &list);
    Q_INVOKABLE QString getSystemName();
};

#endif // SYSTEMSERVICE_H
#include "systemservice.h"


SystemService::SystemService(QObject *parent)
    :QObject(parent)
{

}

QJsonObject SystemService::getSystemInfo(const QVariantList &list)
{
    QString strProductVersion = QSysInfo::productVersion();
    QString strProductType = QSysInfo::productType();
    QString strKernelType = QSysInfo::kernelType();
    QString strCurrentCpuArchitecture = QSysInfo::currentCpuArchitecture();
    QJsonObject jsonObject;
    for(int i = 0; i < list.count(); ++i)
    {
        QString typeName = list[i].toString();
        if("productVersion" == typeName)
            jsonObject.insert("productVersion", strProductVersion);
        else if("productType" == typeName)
            jsonObject.insert("productType", strProductType);
        else if("kernelType" == typeName)
            jsonObject.insert("kernelType", strKernelType);
        else if("currentCpuArchitecture" == typeName)
            jsonObject.insert("currentCpuArchitecture", strCurrentCpuArchitecture);
    }

    return jsonObject;
}

QString SystemService::getSystemName()
{
    return QSysInfo::productType();
}
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include "systemservice.h"

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

    QGuiApplication app(argc, argv);
    qmlRegisterType<SystemService>("CPPService", 1, 0, "SystemService");

    QQmlApplicationEngine engine;
    const QUrl url(QStringLiteral("qrc:/main.qml"));
    QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
                     &app, [url](QObject *obj, const QUrl &objUrl) {
        if (!obj && url == objUrl)
            QCoreApplication::exit(-1);
    }, Qt::QueuedConnection);
    engine.load(url);

    return app.exec();
}
import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.5
import CPPService 1.0

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    SystemService {
        id: systemService
    }

    Button {
        text: qsTr("获取信息")
        onClicked: {
            var infoArray = [];//先清空
            infoArray.push("productVersion");
            infoArray.push("productType");
            infoArray.push("kernelType");
            infoArray.push("currentCpuArchitecture");
            console.log("infoArray=======================" + infoArray)
            var systemInfo = systemService.getSystemInfo(infoArray)
            //arrayText.text = JSON.stringify(systemInfo)
            arrayText.text = systemInfo["productVersion"] + "\n" + systemInfo["productType"] + "\n" + systemInfo["kernelType"] + "\n" + systemInfo["currentCpuArchitecture"] + "\n"
            var type = systemService.getSystemName()
            typeText.text = type
            console.log("type=======================" + type)
        }
    }

    Text {
        id: arrayText
        color: "blue"
        anchors.top: parent.top
        anchors.topMargin: 100
        anchors.left: parent.left
        anchors.leftMargin: 20
        text: qsTr("text")
    }
    Text {
        id: typeText
        color: "red"
        anchors.top: parent.top
        anchors.topMargin: 100
        anchors.right: parent.right
        anchors.rightMargin: 20
        text: qsTr("type")
    }
}

运行结果:

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

qml向Qt的C++传数组参数 的相关文章

  • 我应该如何在 Pyside6 应用程序中使用 Material Design?

    我的 pyside 6 应用程序中有以下代码 import sys os from PySide6 QtGui import QGuiApplication from PySide6 QtQml import QQmlApplication
  • QML 中日期和时间的正则表达式(DD/MM/YYYY hh:mm:ss)

    在QML2中我没有找到任何Calender控件 我已经实现了一个以日期和时间作为输入的控件 并且我使用正则表达式进行验证 该验证与日期 包括闰年和其他验证 相匹配 主要问题是空格 退格键也应该被视为有效 例如 s s s s s s s s
  • Qt/Qml:地图元素的 Repeater 与 MapItemView

    我想用来自 a 的地图元素 如 MapCircle 填充 Qml 地图QAbstractListModel 似乎有两个 Qml 工具适合于此 MapItemView 1 和Repeater 2 这Repeater更强大 例如 它允许嵌套模型
  • 在移动设备上部署 C++ QML 插件的正确方法是什么?

    我经常使用 Box2D QML 插件 看起来效果非常好 但是 我想在 Android SGS2 上部署我的示例应用程序 但我似乎无法让它工作 无论我尝试在 AVD 上还是在设备上运行它 它都不起作用 androiddeployqt 成功完成
  • 如何使用 qt5(QtQuick 2.1) 及更高版本在窗口上打印度数符号

    当我使用 qt4 8 qt fast 1 1 进行 gui 时 我可以成功地打印学位 260但是当升级到 qt5 及更高版本时 它就停止工作了 我在网上搜索 发现了很多相关链接 例如 http www fileformat info inf
  • 在 Windows 上部署 QML 应用程序的正确方法

    最近 我需要为我的 Qt QML 应用程序创建一个部署包 这个过程非常繁琐 因为您需要手动查找并复制依赖项 正如 官方 中所述Qt Wiki https wiki qt io Deploy an Application on Windows
  • 在 QML 中获取 $HOME 和/或用户名

    我需要知道如何获取用户的用户名和 或主目录 我用 google 搜索了一段时间 但只能找到 C 或 BASH 的变量 如何获取用户名或主目录 我正在用 QML 写作 这就是我的实现方式 Qml环境变量 h ifndef QMLENVIRON
  • 带有 QML 的 FbxGeometryLoader

    我想将 fbx 文件导入到我的Scene3D https doc qt io qt 5 11 qml qtdatavisualization scene3d html 通过QMesh https doc qt io qt 5 11 qt3d
  • DropArea 不会通知有关 onEntered、onExited、onDropped 的操作

    I have Rectangle洋溢着MouseArea其中上onPressAndHold 处理程序透露第二个Rectangle和转账drag对此采取行动Rectangle 问题是当我移动那一秒时Rectangle over DropAre
  • 由 Javascript 填充的 QML ListView

    我刚刚意识到 根据一些 QML Bugreport ListView 缺少 JSON Delegate 所以我有两个选择 通过用Javascript或C 创建的模型来填充它 特别是我需要从预定义的 URL 下载 json 数据并将它们解析到
  • 设置Loader项目属性

    In the context https stackoverflow com questions 33513546 delegate folderlistmodel in tableview文件管理器 我有一个TableView组件保存在文
  • Q_PROPERTY NOTIFY 信号及其参数

    我有写 propertyChanged 的习惯signals 带参数 这样接收端就不需要调用Q PROPERTY s READ明确地发挥作用 我这样做是出于清晰的考虑 并且假设在 QML 数据绑定情况下 不需要对 getter 进行 昂贵
  • 如何使用 qt 在键盘上仅显示数字

    我在我的项目中使用 Qt Quick Virtual Keyboard 当我单击一个对象时 我想显示键盘但只显示数字 我怎样才能做到这一点 这就是我想做的 您可以使用Qt ImhFormattedNumbersOnly http doc q
  • 如何在 QML 中使用 Font Awesome

    有谁知道如何在 QML 中使用 Font Awesome 吗 我找不到任何文档或任何信息如何在 QML 中使用 Font Awesome 我喜欢做的是使用fontello http fontello com 创建最小的图标集 而不是从 Fo
  • 将项目添加到自定义组件的布局

    我有一个习惯Footer Component我想在 QML 应用程序的不同位置重用它 Rectangle color gold height 50 anchors bottom parent bottom left parent left
  • 通过对 XmlHttpRequest (REST) 的响应在 QML 中显示图像

    我需要从 REST API 调用中获取 jpeg 图像 我使用 XMLHttpRequest 因为请求需要身份验证标头 即我不能只创建一个图像并将源设置为带有 user passwd url 的 URL 我认为我可以通过将 REST 数据设
  • 在 Qt Creator 中相互公开 QML 组件

    我正在使用 Qt Quick 和 PySide2 开发仪表板应用程序 但在 Qt Creator 的设计模式中公开我的 QML 组件时遇到问题 我的文件夹结构如下所示 myapp mycomponents component1 qml co
  • 调整 QML 图像显示尺寸

    我有一个带有嵌套的 QML 窗口RowLayout 在内排我有两个图像 来源 png这些图像的文件 故意 相当大 当我尝试设置height这些图像上的属性使它们变小 但它们仍然被画得很大 Desired Appearance Actual
  • 如何在 C++ 和 QML 应用程序中使用 qrc?

    我在 Windows7 上用 c qnd Qt Creator QML 编写了 Qt Quick Desktop 应用程序 现在 我必须部署它 并且我需要隐藏 qml 文件和图像 意味着 将它们放入资源等中 我读到有一个很好的方法可以使用
  • QT/QML Android App,点击通知栏时打开应用程序

    我为 Android 应用程序制作了一个 QT 当我单击平板电脑中上面看到的按钮通知栏时 但是 如果单击通知 我的应用程序将打开 聚焦 不知道 并显示黑色窗口 简单来说怎么做呢 我的代码是 package org ays operation

随机推荐

  • Paper writting accumulation

    Abstract last Our extensive experiments on multiple benchmark datasets demonstrate the superiority of compared to a numb
  • DVWA - XSS DOM (low)

    low级别 XSS 全称Cross Site Scripting 即跨站脚本攻击 某种意义上也是一种注入攻击 是指攻击者在页面中注入恶意的脚本代码 当受害者访问该页面时 恶意代码会在其浏览器上执行 需要强调的是 XSS不仅仅限于JavaSc
  • 抖音 x-gorgon 03 免费生成接口 抖音6.3.0版本

    接口已经更新 请参考文章 https blog csdn net wql2014302721 article details 113737772 相关文章 抖音爬虫从0到1 第一弹 环境配置 抖音 x gorgon 03 免费生成接口 抖音
  • Markdown文档小技巧

    MarkDown文档现在可以说普及率原来越高 相对于其他的编辑 记得重点是如何输出内容 提供给你对应的 神秘代码 来完成一些如生成目录 数字符号 链接啊这些东西 更加关心文档的内容 0 推荐的的markdown文档编辑工具 我这里推荐Typ
  • android 关于mk如何引用其它so库

    通常 开发android的软件 常常需要编译so库 然编译的这个so库 需要调用多个其它的so库 这里主要记录一下 编译so库时 调用其它so库的mk 是怎么写的 这里讲的示例 需要编译出libtest3 so 它需要调用libtest1
  • Qt:QML:程序最大化最小化全屏之间的切换

    啥也不说了 直接上代码 import QtQuick 2 5 import QtQuick Controls 1 4 import QtQuick Window 2 0 ApplicationWindow id idMainWindow v
  • 美的年营收3412亿:净利286亿 何享健控制31.5%股权

    雷递网 雷建平 5月4日报道 美的日前公布年报 年报显示 美的2021年营收为3412亿元 较上年同期的2842亿元增长20 06 美的2021年净利为285 74亿元 较上年同期的272 23亿元增长4 96 扣非后净利为259 29亿元
  • oracle数据库中varchar类型字段中存放的有数字和汉字情况,比较大小问题解决

    如果你也正在为这种问题头疼 当你看到我这篇博客时 恭喜你 问题的解决方案来了 你头疼的问题可以解决了 这个问题是我在最近的项目中遇到的难题 上网查阅了很多资料 用什么平常使用的 lt lt gt gt 都没能解决问题 最后还是问了大牛 才解
  • SpringCloudGateway集成SpringDoc CORS问题

    SpringCloudGateway集成SpringDoc CORS问题 集成SpringDoc后 在gateway在线文档界面 请求具体的服务接口 报CORS问题 Failed to fetch Possible Reasons CORS
  • 2.5 使用SolidWorks转换STL格式为OBJ文件格式

    1 说明 使用SW进行三维模型建模 一般应用在机械工程领域中 将模型保存成STL格式后 转换为 obj文件 才能进一步转换为mesh文件 供QT中的3D控件进行使用 本文章记录一些格式转换步骤和关键点 以便参考 2 第一步 首先在SW软件界
  • easyui怎样实现textarea

    uqery easyui 本身没有实现textarea的封装 用的知识html元素 但是提供了textarea的验证器
  • cpp:State Pattern

    file Gold h brief State Pattern 状态模式 C 14 2023年5月29日 涂聚文 Geovin Du Visual Studio 2022 edit author geovindu date May 2023
  • PADS生成SMT坐标文件

    做SMT时 除了 gerber文件 外 还要提供 BOM文件 和 坐标文件 gerber文件 和 BOM文件 前面都有介绍过了 现在详细说一下生成 坐标文件 的方法 贴片厂家提供了操作教程 如下 所以 我们点开厂家的教程 按步骤操作即可 参
  • ImageMagick任意文件读取漏洞(CVE-2022-44268)

    0x00 前提 前几天爆出一个 ImageMagick 漏洞 可以造成一个任意文件读取的危害比较可观 最近有时间来复现学习一下 主要是影响的范围很大 很多地方都有这个问题 需要来学习一下 0x01 介绍 ImageMagick 是一个免费的
  • 粒子群算法(PSO)

    这几天看书的时候看到一个算法 叫粒子群算法 这个算法挺有意思的 下面说说我个人的理解 粒子群算法 PSO 是一种进化算法 是一种求得近似最优解的算法 这种算法的时间复杂度可能会达到O n 得到的结果不一定是最优解 往往已经很接近最优解了 最
  • 基于OFDM的水下图像传输通信系统matlab仿真

    目录 1 算法运行效果图预览 2 算法运行软件版本 3 部分核心程序 4 算法理论概述 5 算法完整程序工程 1 算法运行效果图预览 2 算法运行软件版本 matlab2022a 3 部分核心程序 function rx img func
  • 日本語 第二十二課

    森 毎晩 見 森先生每天晚上看电视 昨日 忙 昨天特别忙 簡単 电脑操作起来不简单 今日 曇 今天是阴天 明日 行 明天去打保龄球啊 明日 仕事 对不起 明天有工作啊 昨日 試験 昨天的考试怎么样啊 難 有一点难 但是都答上了 派手 这个领
  • 蓝桥杯题解 寻找2020 Java答案

    import java util ArrayList import java util Scanner public class Main static Scanner s new Scanner System in static Stri
  • QMap详解

    QMap详解 QMap是Qt的一个模板类 它是基于红黑树算法的一套字典 QMap
  • qml向Qt的C++传数组参数

    我们都知道qml和C 可以进行交互 但数据交互的过程中 一般只限于内置类型 比如int bool double等 如果是json或数组由C 传给qml qml是可以解析的 但如果是qml传数组给C 呢 该如何传参及解析数组参数呢 C 中通过