【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!")
        }
    }
}

相关推荐

  1. qt中qml调用cpp中的逻辑

    2023-12-07 18:22:03       27 阅读
  2. QMLC++交互

    2023-12-07 18:22:03       38 阅读
  3. CPP语法(六)——函数模板

    2023-12-07 18:22:03       35 阅读
  4. QMLC++交互详解

    2023-12-07 18:22:03       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-07 18:22:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-07 18:22:03       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-07 18:22:03       82 阅读
  4. Python语言-面向对象

    2023-12-07 18:22:03       91 阅读

热门阅读

  1. 怎么运营网站不受漏洞攻击

    2023-12-07 18:22:03       61 阅读
  2. Kubernetes学习笔记-Part.08 安装k8s环境

    2023-12-07 18:22:03       67 阅读
  3. 将 .NET Aspire 部署到 Kubernetes 集群

    2023-12-07 18:22:03       44 阅读
  4. 可视化学习:WebGL的基础使用

    2023-12-07 18:22:03       51 阅读
  5. 在输入框里直接粘贴图片

    2023-12-07 18:22:03       56 阅读
  6. C++ 邮件槽ShellCode跨进程传输

    2023-12-07 18:22:03       42 阅读
  7. 将 .NET Aspire 部署到 Kubernetes 集群

    2023-12-07 18:22:03       41 阅读
  8. 可视化学习:WebGL的基础使用

    2023-12-07 18:22:03       44 阅读