将C++对象注册成QML控件并提供可被调用的函数

news2024/11/26 3:48:51

0x00 使用QML编写界面

import QtQuick 2.14
import QtQuick.Window 2.14
import QtQuick.Controls 1.4
import QtQuick.Controls 2.12 as Controls
import QtQuick.Controls.Styles 1.4
import QtQuick.Controls.Material 2.12
//import com.HLD 1.0

Window {
    visible: true;
    minimumHeight: 480;
    maximumHeight: 480;
    minimumWidth: 640;
    maximumWidth: 640;
    title: qsTr("HLD.TableView")
    color: Qt.rgba(127, 255, 170, 1.0)

    Row{
        anchors.centerIn: parent;
        spacing: 10;

        TextField {
            id: inputField;
            width: 300;
            placeholderText: "Enter text";

            style: TextFieldStyle {
                background: Rectangle {
                    color: "#ffffff"
                    border.color: "#40E0D0"
                    radius: 4
                }
            }
        }

        Button{
            id: btn;

            text: "发送";
            style: ButtonStyle {
                background: Rectangle {
                    color: "#2196f3"
                    radius: 4;
                }

                label: Text {
                    text: btn.text
                    color: "#ffffff"
                    font.pixelSize: 16
                }
            }

            onClicked: {
                if(inputField.text.length > 0)
                {
                    console.log(inputField.text);
                    UdpCli.sendMsg(inputField.text);
                }
            }
        }
    }
}

0x01 使用C++定义一个类,并用Q_INVOKABLE宏修饰一个发送UDP消息的成员函数。

#ifndef UDPCLI_H
#define UDPCLI_H

#include <QObject>
#include <QUdpSocket>
#include <QString>

class UdpCli : public QObject
{
    Q_OBJECT
public:
    explicit UdpCli(QObject *parent = nullptr);

    Q_INVOKABLE void sendMsg(QString msg);

signals:

private:
    QUdpSocket* udpSocket;
};

#endif // UDPCLI_H

//----------------------------

#include "udpcli.h"
#include <QHostAddress>

UdpCli::UdpCli(QObject *parent) : QObject(parent)
{
    udpSocket = new QUdpSocket(this);
    udpSocket->bind(QHostAddress::LocalHost, 9898);
}

void UdpCli::sendMsg(QString msg)
{
    udpSocket->writeDatagram(msg.toStdString().c_str(),msg.size(),
                             QHostAddress("127.0.01"), 19898);

}

将C++对象注册成QML控件

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQuickStyle>
#include <QMetaObject>
#include <QQmlContext>
#include "udpcli.h"

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

    QGuiApplication app(argc, argv);
    QQuickStyle::setStyle("Material");

    UdpCli m_udpCli;

    /**
     * @brief qmlRegisterSingletonInstance
     * @param Url名
     * @param 主版本
     * @param 次版本
     * @param Qml中控件名
     * @param C++对象
     */
    // qmlRegisterSingletonInstance("com.HLD", 1, 0, "UdpCli", &m_udpCli);

    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);

    auto context = engine.rootContext();
    context->setContextProperty("UdpCli", &m_udpCli);

    engine.load(url);

    return app.exec();
}
  • 效果演示

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/750357.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

赛效:WPS文档怎么在文本中插入连续的编号

1&#xff1a;打开一个WPS文档&#xff0c;全选所有的段落。 2&#xff1a;点击“开始”选项卡里点击编号下拉菜单&#xff0c;选择一种编号样式并点击。 3&#xff1a;我们会看到每段前面已经自动出现编号&#xff0c;而且是连续的。这个时候&#xff0c;我们在文档末尾新增一…

基于串行和并行ADMM算法在分布式调度中的应用(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

管理软件开发平台:用科技提升数据治理能力,实现流程化办公!

如果实现流程化办公&#xff0c;想必是很多企业心心念念的发展愿望。但是&#xff0c;如何实现&#xff1f;利用什么样的平台可以完成这一目标&#xff1f;这是很多人值得深思的问题之一。管理软件开发平台实行100%全源码开放&#xff0c;是轻量级、可视化低代码开发平台&#…

6.带你入门matlab 协方差和相关系数( matlab程序)

1.简述 协方差 Vcov&#xff08;X&#xff09; Vcov&#xff08;X&#xff0c;flag&#xff08;同上&#xff09;&#xff09;&#xff1b; X为矩阵 相关系数 Rcorr&#xff08;X&#xff09; X为矩阵 协方差和相关系数函数的使用如下 代码及运行结果 %% 协方差 clear a…

kaggle学习笔记-餐厅数据挖掘

Zomato Complete EDA and LSTM model 背景 分析Zomato数据集的基本思想是为了公平地了解影响在班加罗尔不同地方建立不同类型餐厅的因素&#xff0c;每个餐厅的总评级&#xff0c;班加罗尔是这样一个城市&#xff0c;拥有超过12,000家餐厅&#xff0c;餐厅供应来自世界各地的…

Android 源码编译方法

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、查看项目所在分支二、切换到目标分支三、查看当前所在分支四、编译Android源码五、source Android 编译环境六、lunch 所需的编译项目七、单编 模块…

2.10 Bootstrap 响应式实用工具

文章目录 Bootstrap 响应式实用工具打印类 Bootstrap 响应式实用工具 Bootstrap 提供了一些辅助类&#xff0c;以便更快地实现对移动设备友好的开发。这些可以通过媒体查询结合大型、小型和中型设备&#xff0c;实现内容对设备的显示和隐藏。 需要谨慎使用这些工具&#xff0c…

Qt实现右键菜单栏显示

用到头文件 qmenu.h qevent.h qlabel.h代码 #pragma once // QtTestMenu2.h #include <QtWidgets/QWidget> #include "ui_QtTestMenu2.h" #include "qmenu.h" #include "qevent.h" #include "qlabel.h"class QtTestMenu2 : publ…

基于Nonconvex规划的配电网重构研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【原理图专题】OrCAD Capture如何批量修改原理图网络名称

在实际的工作中,我们很少是从0到1。很多时候供应商或是前人已经给我们留下了电路图,我们要做的初级工作就是让这些标准电路为我们所用。 但事实却是,供应商他们自己公司有自己的一套画图命名标准,而我们自己也有一套命名规则。因为大为都是自己熟悉自己的,所以导致了不能…

【我们一起60天准备考研算法面试(大全)-第十天 10/60】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

PLL 设计理论

鉴相器的输出驱动电荷泵的开关&#xff0c;再经过滤波器得到一个输出电压&#xff0c;通过VCO产生一个频率&#xff0c;再通过分频器反馈回鉴相器。 杂散&#xff1a;常见的杂散分为参考杂散和小数杂散。参考杂散是指在锁相环输出信号的频谱中&#xff0c;特定频偏处出现的非理…

基于springboot的地铁轨道交通运营系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

【LeetCode】动态规划 刷题训练(九)

文章目录 环绕字符串中唯一的子字符串题目解析状态转移方程返回值完整代码 最长递增子序列子数组与子序列的区别状态转移方程完整代码 摆动序列题目解析状态转移方程f[i]状态转移方程g[i]状态转移方程 完整代码 环绕字符串中唯一的子字符串 点击查看:467. 环绕字符串中唯一的子…

Flutter——最详细(NavigationBar)使用教程

NavigationBar简介 Material 3 导航栏组件! 导航栏提供了一种持久且便捷的方式来在应用程序的主要目的地之间进行切换。 使用场景&#xff1a; 底部菜单栏模块 属性作用onDestinationSelected选择索引回调监听器selectedIndex目前选定目的地的索引destinations存放菜单按钮back…

Filter的四大插件(grok、date、mutate、mutiline)

Filter的四个插件 一、grok 正则捕获插件1、grok 的概念2、内置正则表达式调用3、常用的常量NetworkingpathsMonths: January, Feb, 3, 03, 12, DecemberDays: Monday, Tue, Thu, etc...Years?Syslog Dates: Month Day HH:MM:SSShortcutsLog formatsLog Levels 3、自定义表达式…

49. 字母异位词分组

题目链接&#xff1a;力扣 解题思路&#xff1a;字母异位词分组也就是将&#xff1a;字母以及字母个数都相同的单词组合成一组&#xff0c;然后返回结果&#xff0c;比如ate&#xff0c;eat&#xff0c;tea都是由1个a&#xff0c;1个t&#xff0c;1个e组成。 所以&#xff0c…

【python基础】python中的with关键字及其相关用法

目录 1.with关键字 2.上下文管理器 3.总结 4.with torch.no_grad()的用法 在Python中&#xff0c;with是一个关键字&#xff0c;用于处理上下文管理器&#xff08;context manager&#xff09;。上下文管理器是一种对象&#xff0c;它定义了在进入和离开某个上下文时应该执…

7.12~7.13学习总结

public static void main(String[] args){File dirnew File("D:\\小花花");boolean flag dir.mkdir();System.out.println(flag);File dirsnew File("D:\\小花花\\你爸爸");dirs.mkdirs();String[]adir.list();//列出下一级&#xff1b;字符串数组for(Stri…

了解 JVM - 认识垃圾回收机制与类加载过程

前言 本篇通过介绍JVM是什么&#xff0c;认识JVM的内存区域的划分&#xff0c;了解类加载过程&#xff0c;JVM中垃圾回收机制&#xff0c;从中了解到垃圾回收机制中如何找到存活对象的方式&#xff0c;引用计数与可达性分析的方式&#xff0c;再释放垃圾对象时使用的方式&…