如何使用 C++ 更新 QML 文本

2024-06-25

我有一个小问题。有人可以告诉我如何从 C++ 更新 qml 文本吗?我有一个使用线程的示例,但我不想应用此方法,因为我不知道如何设置 run() 函数中的参数。要完全理解我,这里是我的代码。在启动线程时的主函数中,我想放置自定义文本或具有文本的字符串变量。

thread.h

#ifndef THREAD_H
#define THREAD_H

#include <QThread>

class Thread : public QThread
{
    Q_OBJECT
public:
    Thread(QObject *parent=nullptr);
   ~Thread() override;
    Q_SLOT void stop();
    Q_SIGNAL bool textChanged(const QString & text);
protected:
    void run() override;
};

#endif // THREAD_H

thread.c

#include "thread.h"
#include <QDebug>

Thread::Thread(QObject *parent):
    QThread(parent)
{
}

Thread::~Thread()
{
}

void Thread::stop()
{
    requestInterruption();
    wait();
}

void Thread::run() //here I want to specify a QString variable such that in main function to call the function with my text, and not specified the text from here
{
int i=0;

while(!isInterruptionRequested()){
QString text;
    text = QString("I changed the text"); // I don't want to declare from here the text.
        Q_EMIT textChanged(text);
QThread::msleep(20);
    qDebug() <<i++;

  }
}

main.cpp

...
Thread thread;
    QQmlApplicationEngine engine;
QObject::connect(&app, &QGuiApplication::aboutToQuit, &thread, &Thread::stop);
            thread.start();
            engine.rootContext()->setContextProperty("thread", &thread);
            engine.load(QUrl("qrc:/main.qml"));
            thread.stop();
...

main.qml

  .....
  Text {
                    objectName: "myLabel"
                    id: txt
                    width: 200
                    height: 29
                    color: "#faf9f9"
                    text: qsTr("Text")
                    font.pixelSize: 12
                    }
        Connections{
                target: thread
                onTextChanged: txt.text = text
        }

.....

您可以使用信号将数据从 C++ 发送到 qml,如下所示:

//主.cpp

int main(int argc, char *argv[])
    {
    QGuiApplication app(argc, argv);
    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    // Class init
    YourClass yourObject;

    // Embedding C++ Objects into QML with Context Properties
    QQmlContext* ctx = engine.rootContext();
    ctx->setContextProperty("yourObject", &yourObject);

    return app.exec();
    }

//main.qml

import QtQuick 2.6

Window {
    id: mainWindow

    Connections {
        target: gapi
        onSignalData: {
            console.log("Data: " + data)
            textToChange.text = "Changed to: " + data
        }
    }

    Text {
        id: textToChange
        text: "beforeChange"
    }
}

//yourClass.h

class YourClass : public QObject
{
signals:
    // Signal from YourClass to QML
    void signalData(QString data);
}

//yourClass.cpp

emit signalData("Hello QML"); // Signal from GAPI to QML

这一页https://felgo.com/cross-platform-development/how-to-expose-a-qt-cpp-class-with-signals-and-slots-to-qml https://felgo.com/cross-platform-development/how-to-expose-a-qt-cpp-class-with-signals-and-slots-to-qml有一个关于“How to Expose a Qt C++ Class with Signals and Slots to QML”的完整教程

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

如何使用 C++ 更新 QML 文本 的相关文章

  • 以 ISO 8601 格式输出日期

    如何在 C 中获取以下格式的日期 2016 04 26T19 50 48Z include
  • 我们可以在 C# 中定义枚举的隐式转换吗?

    是否可以在 C 中定义枚举的隐式转换 可以实现这一目标的东西吗 public enum MyEnum one 1 two 2 MyEnum number MyEnum one long i number 如果没有 为什么不呢 有一个解决方案
  • MVC。网络错误:初始化字符串的格式不符合从索引 0 开始的规范

    我的连接字符串是
  • gets 和 scanf 有什么区别?

    如果代码是 scanf s n message vs gets message 有什么区别 似乎两者都获取消息的输入 基本区别 参考您的特定场景 scanf 遇到一个时结束接受输入whitespace newline or EOF gets
  • 在子目录中构建共享库

    我正在尝试构建一个使用一些 C 代码的 R 包 我有一个编译为可执行文件的 C 库 可以从命令行调用 有一个与之关联的 Makefile 我正在尝试获取信息here http cran r project org doc manuals R
  • 如何将 CroppedBitmap 转换为 BitmapImage

    我正在尝试将 CroppedBitmap 转换为 BitmapImage 编辑 不使用内存流 我尝试过直接转换它 似乎这不是一个选择 这应该没那么难 我正在尝试剪切 BitmapImage 的一部分 并创建一个仅包含新裁剪的 Bitmap
  • 将标准库添加到C++ eclipse项目中

    一个 非常 新手 C 问题 有没有办法自动将标准库添加到 C eclipse 项目中 我安装了 CDT 主要功能插件 您可以手动添加 STL 标头的路径路径和符号 gt 包含选项卡 http help eclipse org galileo
  • 在 Windows 服务中使用 OleDb 从 Excel 读取数据?

    免责声明 我知道这是一种不好的做事方式 这是我们与客户的唯一选择 Problem 我们需要每隔 x 时间从 Excel 文件读取数据 数据通过第三方 Excel 插件不断变化 应用程序的环境是 Windows XP SP1 和 Net 2
  • 使用私有构造函数的 C# 单元测试类?

    好吧 我刚刚收到一个作业 我必须对具有私有构造函数的类执行单元测试 现在 当所有方法也都是非静态时 我该如何在不初始化类的情况下进行单元测试 有什么方法可以对具有私有构造函数的类进行单元测试 无需反射 如果您无法将类公开 您仍然可以通过以下
  • 用于 C/C++ 的独立跨平台 (Windows/Linux) 文件压缩?

    我正在寻找一个 最好是小的 C 或 C 开源库 我可以将其包含在我的 MIT 许可项目中 托管在 google 代码上 我是一名业余爱好 C C 程序员 所以我并不那么先进 但我只知道为名为 SA MP 的应用程序 适用于 Windows
  • 持续运行的 C# 代码 - 服务还是单独的线程?

    我有一个 NET 4 Web 应用程序 它有 3 个关联的独立项目 DAL BAL 和 UI 我正在使用实体框架进行数据库交互 我有代码循环遍历一堆数据库数据 根据找到的内容调用方法 然后更新数据库 我希望这段代码一直运行 同时 我希望用户
  • UWP - 绑定枚举差异

    我遇到了一个非常有趣的问题 假设 UWP 应用中有以下 XAML 页面内容
  • 嘲笑会员用户

    我目前正在开发一个 asp net mvc 2 应用程序 它使用默认的 SqlMembershipProvider 进行身份验证 我已经实现了一个控制器方法 通过调用读取当前用户的 ProviderUserKeyMembership Get
  • 除法时的小数舍入误差 (C#)

    我基本上有四个数字 比如 100 200 300 400 我需要计算概率为 100 100 200 300 400 200 100 200 300 400 等等在 当我使用小数数据类型来存储这些概率时 由于舍入问题 它们不会达到 1 在不使
  • 为什么 ASP.Net MVC Range 属性采用类型?

    我只是想知道为什么范围验证属性可以采用类型和两个字符串作为参数 这是为了根据枚举或类似的东西验证字符串吗 另外 我想做的是找到一种简单的方法来验证必须出现在枚举中的 3 个字符的字符串 有什么建议吗 谢谢 亚历克斯 我确实发现你提到的 Ra
  • 没有类型的 IEnumerable 属性

    我正在尝试创建一个类似于来自 MSDN 的官方 DataGrid ItemsSource 的属性 public IEnumerable ItemsSource get set 这提供了对任何派生类中任何类型的支持 有了这个 我可以设置类似的
  • 合并大文件的最佳方法是什么?

    我必须合并数千个大文件 每个大约 200MB 我想知道合并这些文件的最佳方法是什么 行将有条件地复制到合并文件中 可以使用 File AppendAllLines 或使用 Stream CopyTo 吗 使用 File AppendAllL
  • 在 C# 中为 ListBox 分配数据源时,如何从 ListBox 中删除所选项目?

    在 C 中为 ListBox 分配数据源时 如何从 ListBox 中删除所选项目 尝试删除时出现错误 设置 DataSource 属性后 无法修改项目集合 但是当我尝试从数据源 数据表 中删除项目时 它会抛出错误 因为 数据行不在当前行集
  • 矩阵行列式算法 C++

    我是编程新手 我一直在寻找一种找到矩阵行列式的方法 我在网上找到了这段代码 但我很难理解这里的算法 我对递归的基础没有问题 但继续和主循环我很难理解 非常感谢任何可以向我解释该算法的人 int determ int a MAX MAX in
  • Json.net 将数字属性序列化为字符串

    我正在使用 JsonConvert SerializeObject 序列化模型对象 服务器期望所有字段都是字符串 我的模型对象具有数字属性和字符串属性 我无法向模型对象添加属性 有没有办法将所有属性值序列化为字符串 我必须只支持序列化 而不

随机推荐

  • 如何快速将 void 块传递给 objc_setAssociatedObject

    我正在尝试通过扩展向 UIView 添加点击手势支持 使用 Objective C 非常简单 但是当我尝试在运行时属性上设置 void 返回块时 出现以下错误 错误 类型 gt Void 不符合协议 AnyObject 这是计算的属性 va
  • 如何计算整数中零位的数量?

    我将如何找到 C 中 零 位的数量 假设我有一个整数 int value 276 我有位 100010100 但是如何计算零呢 如果你想要效率 那么 Hackers Delight 一书中有一个很好的实现 22条指令无分支 unsigned
  • 如何使用javascript计算另一个div内的div总数

    如何计算总数div包含在另一个元素中的元素div使用JavaScript The getElementsByTagName 不仅是一个document方法 但可以在任何 DOM 元素上运行 element 按标签名称获取元素是 如同docu
  • 生成多边形内的坐标

    我想将多边形的值分组到一个精细的规则网格中 例如 我有以下坐标 data 2 353 data lats np array 57 81000137 58 15999985 58 13000107 57 77999878 data lons
  • 通过 Javascript 在聚合物元素模板内添加或附加 HTML

    为了使轮播功能在 Polymer 元素内部工作 我以编程方式在元素脚本内部创建 Slick 轮播所需的标记 假设在此代码片段中 this videos 已作为包含 youtube 视频信息的对象数组加载 特别是 id 和 name 属性 C
  • 如何在每次输入退出或取消时中断表单流程?

    我正在使用 BotFramework 在 Net C 中创建一个聊天机器人 在我的一个对话框中 当我开始填写表单流程时 我无法退出流程 直到我填写所有流程为止 是否存在退出和离开表格的可能性 这是我的代码 路易斯对话框 cs LuisInt
  • 注销不会在 FOSUserBundle 中正确销毁/清除会话

    我遇到了一些问题 不知道为什么 当我从由 FOSUserBundle 处理的应用程序注销时 因为当前会话永远不会被破坏 甚至不清楚当我重新登录时会导致问题 因为我在会话上存储了一些数据 这就是我的security yml好像 securit
  • Windows / Powershell 将程序版本获取到变量中

    我很接近 但不在那儿 我可以通过 powershell 获取应用程序的版本 但它附带一堆文本 这个命令 powershell NoLogo NoProfile Command get item Path c myapp exe Versio
  • Material UI + 酶测组件

    我在 React 中有一个组件 我正在尝试用 Jest 测试它 不幸的是测试没有通过 组件代码 import React Component from react import ProductItem from ProductItem Pr
  • 如何在 Kendo UI 网格中合并单元格

    我在 Kendo UI 的官方文档中没有看到任何内容 只是检查是否有人进行了自定义以合并 Kendo UI 网格中的单元格 我有这样的内容 Technology Core Language Communication 15 Technolo
  • 安装 sqlite3 公共密钥环时出错,未找到

    怎么了 我该如何安装它 PS C Users luism gt gem install sqlite3 暂时增强 MSYS MINGW 的 PATH 安装所需的 msys2 软件包 mingw w64 x86 64 sqlite3 警告 未
  • 对 python 中 libsvm/scikit-learn 库的某些功能进行建模的一些疑问

    我已经抓取了很多 eBay 标题 例如 Apple iPhone 5 White 16GB Dual Core 我已经用这种方式手动标记了所有这些 B M C S NA 其中 B 品牌 Apple M 型号 iPhone 5 C 颜色 白色
  • 我是否应该显式发送刷新令牌来获取新的访问令牌 - JWT

    在我的应用程序中 当用户成功登录时 我返回访问令牌和刷新令牌 访问令牌和刷新令牌的过期时间已分别设置为 10 分钟和 40 分钟 我应该对这些值做更多研究 这只是为了测试 我使用了下面文章中描述的实现 http www svlada com
  • 在 ScriptMain.cs 之外的另一个类中使用 SSIS 变量

    我在 SSIS 中有一个 C 脚本任务 我可以毫无问题地传递变量 我在脚本中创建了另一个类 称为 otherclass cs 如何在 otherclass cs 中使用该变量 我尝试这样做 urlBase Dts Variables Use
  • 获取打字稿中的函数名称

    我正在寻找一种方法来获取传入参数的函数名称 console clear class A test testCall fnc Function console log fnc name i want it display test here
  • Apache POI 编号列表

    我在用apache poi在 MS Word 文档中写入一些数据 我已经花了几个小时试图弄清楚如何创建编号列表但我还没有取得任何成果 我已经经历过this https stackoverflow com questions 31310020
  • Jenkins email-ext 插件不发送邮件

    我的机器上安装了 Jenkins 版本 1 480 3 和电子邮件扩展插件 2 30 2 来自 管理詹金斯 部分的测试邮件工作正常 当我向我的职位添加可编辑的电子邮件通知时 我没有收到它 还尝试在可编辑电子邮件通知高级部分中配置 触发器 那
  • 来自插件的 Rails 3 控制器

    我正在创建一个 Rails 3 插件 我想在其中集成控制器 rails 将自动将其视为 app controllers 文件夹中的 普通 控制器 我该如何做到这一点 或者从插件获得自定义控制器的最佳解决方案是什么 我找到了文档指南 ruby
  • IDEA IllegalStateException:使用 Kotlin 运行 JUnit 测试时服务即将终止

    昨天 我正在处理我的代码库 并且正在针对我的代码运行单元测试 突然我在 IDEA 日志中看到了以下内容 错误 Kotlin 内部错误 java lang IllegalStateException 服务正在消亡 在 org jetbrain
  • 如何使用 C++ 更新 QML 文本

    我有一个小问题 有人可以告诉我如何从 C 更新 qml 文本吗 我有一个使用线程的示例 但我不想应用此方法 因为我不知道如何设置 run 函数中的参数 要完全理解我 这里是我的代码 在启动线程时的主函数中 我想放置自定义文本或具有文本的字符