【QML】QML与cpp交互(一)—— QML直接调用cpp函数

这篇具有很好参考价值的文章主要介绍了【QML】QML与cpp交互(一)—— QML直接调用cpp函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1、cpp 创建一个类

2、将类对象暴露给QML

3、QML通过对象直接调用cpp函数


1、cpp 创建一个类

类模板如下: 

#include <QtCore/QObject>

class vacUdpClient: public QObject
{
    Q_OBJECT
public: 
    vacUdpClient(QObject* parent = nullptr): QObject(parent) {}

    // Q_INVOKABLE 将当前函数暴露给QML
    Q_INVOKABLE double triggerClickEvent(const QString& qstr);

private:
    /* data */
};

要求: 

  • 使用 Q_OBJECT 宏需要继承 QObject 类。Q_OBJECT能够启用信号和槽机制、使用动态属性系统。(使用 Q_OBJECT 宏的类需要通过Qt的元对象编译器(moc)进行处理。)
  • 使用 Q_INVOKABLE 修饰要暴露给 QML 的函数。

2、将类对象暴露给QML

使用 setContextProperty 将 c++ 对象注册为qml可以识别的对象,setContextProperty两个参数表示的意义为:

  • 第一个参数表示 qml 可以识别的对象名
  • 第二个参数表示 C++ 对象
#include <QtQml/QQmlContext>
#include "vacUdpClient.h"

/*** main.cpp ***/
vacUdpClient udpclient;
QQmlContext* context = engine.rootContext();
context->setContextProperty("udpclient", &udpclient);

3、QML通过对象直接调用cpp函数

import QtQuick 2.0
import QtQuick.Controls 2.0

ApplicationWindow {
    width: 360
    height: 360
    visible: true

    Text {
        anchors.centerIn: parent
        text: "Hello, QML!"
    }

    Button {
        id: sendBtn
        text: "发送"
        onClicked: {
            // 这里的 udpclient 对应setContextProperty的第一个参数
            // triggerClickEvent 是 Q_INVOKABLE 暴露出来的函数
            udpclient.triggerClickEvent("hello, world!")
        }
    }
}

qml如何对接cpp,C/C++,交互文章来源地址https://www.toymoban.com/news/detail-784255.html

到了这里,关于【QML】QML与cpp交互(一)—— QML直接调用cpp函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QML与C++交互

    目录 1 QML获取C++的变量值 2 QML获取C++创建的自定义对象 3 QML发送信号绑定C++端的槽 4 C++端发送信号绑定qml端槽 5 C++调用QML端函数 1 QML获取C++的变量值 全局对象 上下文属性 在qml中可全局直接使用test  2 QML获取C++创建的自定义对象 光标放在成员变量m_iValue和m_sString后面 Alt + En

    2024年02月12日
    浏览(28)
  • 【Qt- C++ & Qml 交互】

    2024年01月10日
    浏览(52)
  • QML与C++交互详解

    在现代软件开发中,图形用户界面(GUI)是用户与程序交互的重要组成部分。Qt框架提供了一种强大的方式来构建跨平台的GUI应用程序,其中QML(Qt Meta-Object Language)和C++的交互是一个重要的主题。本篇博文将深入探讨如何在QML中创建和操作C++对象,实现双向的交互。 在Qt中,

    2024年01月20日
    浏览(27)
  • QML 与C++交互详解

    1.思维导图 2.调用全局变量 在C++中直接定义全局变量,QML中能够直接访问。 使用engine.rootContext()-setContextProperty(\\\"WIDTH\\\",300),设置了一个全局变量WIDTH。 QML中直接访问WIDTH。  3.QML中调用C++类型 自定义一个C++类 MyObject 对象,有两个成员变量m_value和m_str,分别对应一个set和一个

    2024年02月02日
    浏览(26)
  • qml与C++的交互

    qml端使用C++对象类型、qml端调用C++函数/c++端调用qml端函数、qml端发信号-连接C++端槽函数、C++端发信号-连接qml端函数等。 代码资源下载: https://download.csdn.net/download/TianYanRen111/88779433 若无法下载,直接拷贝以下代码测试即可。 main.cpp MyObject.h MyObject.cpp TestObject.h main.qml 参考文

    2024年01月25日
    浏览(34)
  • QT C++类与QML交互

    C++方负责数据,QML负责显示,先准备工作如下: (1)新建一个数据类,继承至QObject class Cdata : public QObject (2)将有交互关系的数据,加入到类的私有成员中 private: int iNum; QString strEdit; (3)给此成员Q_PROPERTY和相应的函数实现(ALT+回车可自动创建) Q_PROPERTY(int iNum READ getINum W

    2024年02月04日
    浏览(31)
  • QML与C++的交互操作

      QML旨在通过C ++代码轻松扩展。Qt QML模块中的类使QML对象能够从C ++加载和操作,QML引擎与Qt 元对象系统 集成的本质使得C ++功能可以直接从QML调用。这允许开发混合应用程序,这些应用程序是通过混合使用QML,JavaScript和C ++代码实现的。除了从QML访问C ++功能的能力之外,Qt

    2024年02月09日
    浏览(27)
  • QML和C++交互中,实现C++中connect到qml的信号,再从qml发射信号传递数据给C++的一种方式

    假设我们有一个需求,要求在用户点击列表中的项目时,不仅在控制台上输出项目的名称,还要在C++端进行一些处理。我们希望在C++端能够接收到用户点击的项目名称,并进行相应的处理。 在这种情况下,我们可能会遇到一个常见的问题:如何在QML中捕获用户点击事件,并将

    2024年02月05日
    浏览(44)
  • C++与QML 信号与槽交互

    在main.cpp中通过 QQmlApplicationEngine engine 获得全局对象 在qml中使用   SCREEN_WIDTH  全局属性 1.创建一个MyObject类  2.在myobject.h中定义一些属性,以便在qml中可以使用 并为每个属性添加读写的方法和相应的信号 2.在myobject.cpp中实现 #include \\\"myobject.h\\\" MyObject::MyObject(QObject *parent) : QOb

    2024年02月16日
    浏览(27)
  • QML、C++ 和 JS 三者之间的交互

    QML、C++ 和 JS 三者之间的交互是 Qt Quick 应用开发的核心。以下是它们之间交互的常见方式: 从 QML 调用 C++ 函数 要从 QML 调用 C++ 函数,您可以使用 Qt 的 QML 注册机制,例如 qmlRegisterType ,将 C++ 类注册为 QML 类型。 C++ 代码:

    2024年02月07日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包