C++ 和 QML 之间的通信

2023-11-26

This page展示如何从 QML 中调用 C++ 函数。

我想做的是通过 C++ 函数更改按钮上的图像(触发状态更改或无论如何完成)。

我怎样才能实现这个目标?

UPDATE

我尝试了 Radon 的方法,但是当我插入这一行时立即:

    QObject *test = dynamic_cast<QObject *>(viewer.rootObject());

编译器这样抱怨:

    error: cannot dynamic_cast '((QMLCppBinder*)this)->QMLCppBinder::viewer.QDeclarativeView::rootObject()' (of type 'struct QGraphicsObject*') to type 'class QObject*' (source is a pointer to incomplete type)

如果相关的话,QMLCppBinder 是我尝试构建的一个类,用于封装从多个 QML 页面到 C++ 代码的连接。这似乎比人们想象的要棘手。

这是一个骨架类,可以为此提供一些背景信息:

    class QMLCppBinder : public QObject
    {
        Q_OBJECT
    public:
        QDeclarativeView viewer;

        QMLCppBinder() {
            viewer.setSource(QUrl("qml/Connect/main.qml"));
            viewer.showFullScreen();
            // ERROR
            QObject *test = dynamic_cast<QObject *>(viewer.rootObject());
        }
    }

如果您设置objectName对于图像,您可以很容易地从 C++ 访问它:

main.qml

import QtQuick 1.0

Rectangle {
    height: 100; width: 100

    Image {
        objectName: "theImage"
    }
}

in C++:

// [...]

QDeclarativeView view(QUrl("main.qml"));
view.show();

// get root object
QObject *rootObject = dynamic_cast<QObject *>(view.rootObject());

// find element by name
QObject *image = rootObject->findChild<QObject *>(QString("theImage"));

if (image) { // element found
    image->setProperty("source", QString("path/to/image"));
} else {
    qDebug() << "'theImage' not found";
}

// [...]

QObject.findChild(), QObject.setProperty()

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

C++ 和 QML 之间的通信 的相关文章

  • 如何调试Roslyn编译生成的dll?

    我正在使用 Roslyn CSharpCompilation 为我的插件生成 dll 文件 文件具有 OptimizationLevel Debug 并生成 pdb 文件 接下来 我使用 Assembly Load 将这些文件加载 到我的程
  • 是否可以使静态控件透明?

    我正在尝试实现一个静态控件 该控件刷新 更改文本 以响应每秒发生一次的某个事件 由于我不想每秒绘制整个客户区域 所以我决定使用静态控件 现在的问题是父窗口被蒙皮 这意味着它有自定义位图作为背景 而静态控件没有适应 所以我正在寻找使静态控件的
  • 我们可以在 C# 中定义枚举的隐式转换吗?

    是否可以在 C 中定义枚举的隐式转换 可以实现这一目标的东西吗 public enum MyEnum one 1 two 2 MyEnum number MyEnum one long i number 如果没有 为什么不呢 有一个解决方案
  • 求 a 范围内的 pow(a^b)modN

    对于给定的b and N以及一系列a say 0 n 我需要找到ans 0 n 1 where ans i 没有a s为此pow a b modN i 我在这里搜索的是可能的重复pow a b modN对于一系列a 以减少计算时间 例子 i
  • 带方括号的 Uri.EscapeUriString

    这是一个奇怪的问题 但让我们看看它会得到什么样的回应 如果我编写一个控制台应用程序 VS 2013 NET 4 5 1 并执行这行代码 Uri EscapeUriString 我明白了 但是 如果我执行同样的事情 嗯 从技术上来说Uri E
  • 以编程方式更改 Excel 中的字体(Trebuchet MS、Calibari)C#

    我目前正在使用一个 C 应用程序 该应用程序有一个将生成 Excel 文件的类 一切都很顺利 Excel 工作表上填充的数据具有 Times New Roman 字体 我想将其更改为其他字体 Calibari 我怎样才能以编程方式做到这一点
  • 如何从 std::vector 中删除元素而不调整其大小

    迭代器擦除 迭代器位置 迭代器擦除 首先是迭代器 迭代器最后 擦除元素 从向量中删除 容器可以是单个元素 位置 或一系列元素 第一个 最后一个 这有效地减少了向量 大小除以元素数量 删除 调用每个元素的 之前的析构函数 and remove
  • 如何处理作为参数传递到方法中的 Lambda 表达式 - C# .NET 3.5

    我对 Lambda 表达式的了解有点不稳定 虽然我可以编写使用 Lambda 表达式 又名 LINQ 的代码 但我正在尝试编写自己的方法 该方法采用一些 Lambda 表达式类型的参数 背景 我正在尝试编写一个方法 该方法从任何其他对象类型
  • ASP.NET 中的 thread.sleep

    我正在为我的网站模拟彗星实时馈送协议 因此在我的控制器中我添加 while nothing new before timeout Thread Sleep 1000 但我注意到添加此功能后整个网站变慢了 调试后我得出结论 当我打电话时Thr
  • 持续运行的 C# 代码 - 服务还是单独的线程?

    我有一个 NET 4 Web 应用程序 它有 3 个关联的独立项目 DAL BAL 和 UI 我正在使用实体框架进行数据库交互 我有代码循环遍历一堆数据库数据 根据找到的内容调用方法 然后更新数据库 我希望这段代码一直运行 同时 我希望用户
  • Excel 2007 中的数值 - 底层 xml 文件中的表示与存储

    这个问题与 NET和OpenXml有关 我已经阅读了以下文章 它有很好的解释 但没有回答我的问题 Excel 2007 中数值的可视化与底层 xml 文件不一致 https stackoverflow com questions 58594
  • 除法时的小数舍入误差 (C#)

    我基本上有四个数字 比如 100 200 300 400 我需要计算概率为 100 100 200 300 400 200 100 200 300 400 等等在 当我使用小数数据类型来存储这些概率时 由于舍入问题 它们不会达到 1 在不使
  • 是否有理由为什么用 XmlInclude 修饰的基类在序列化时仍然会抛出类型未知的异常?

    我将简化代码以节省空间 但所提供的内容确实说明了核心问题 我有一个类 它的属性是基类型 有 3 个派生类可以分配给该属性 如果我将任何派生类分配给容器并尝试序列化容器 XmlSerializer 会抛出可怕的错误 类型 x 不是预期的 使用
  • 没有类型的 IEnumerable 属性

    我正在尝试创建一个类似于来自 MSDN 的官方 DataGrid ItemsSource 的属性 public IEnumerable ItemsSource get set 这提供了对任何派生类中任何类型的支持 有了这个 我可以设置类似的
  • 将 R 值传递给采用 L 值的函数时出现过载歧义

    我有 2 个重载函数 一个采用 L 值 另一个采用 R 值 目的是让该函数可以像这样调用 Obj obj foo obj OR foo Obj 所以 我写了2个重载函数 template
  • 如何进行平衡组捕获?

    假设我有这个文本输入 tes tR R abc aD mnoR xyz 我想提取 ff 输出 R abc R xyz D mnoR xyz R R abc aD mnoR xyz 目前 我只能使用平衡组方法提取组内的内容 如中所示msdn
  • PC 上 XNA 中的信箱和缩放

    有没有一种方法可以让我基本上以 1080p 或 720p 作为默认分辨率来开发 XNA 游戏 然后根据设置的分辨率将游戏中的所有内容缩放到适当的大小 而不必在每个 Sprite 中设置缩放因子Draw 方法 我的想法是 我可以基于 1080
  • Task.Delay 到底是如何工作的?

    他们说 Task Delay 是一个异步 Thread Sleep 为了测试这一点 我写了下面的代码 我希望立即打印 One 然后 3 秒后将打印结果变量 15 2 秒后 将打印 Two 但似乎并非如此 一 不会立即打印 3 秒后打印 On
  • 预览MouseMove 与 MouseMove

    我有相当多的 XAML 经验 但最近我注意到我的大多数同事都使用预览鼠标移动代替鼠标移动事件 我一直用鼠标移动它对我很有帮助 但我忍不住问我什么时候应该使用预览鼠标移动什么时候鼠标移动 有什么区别 各自有什么优点和缺点等等 PreviewM
  • Json.net 将数字属性序列化为字符串

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

随机推荐

  • RAM <4GB 的 64 位 VM 上 Java 中的对象标头大小

    我想知道如果 JVM 的可用 RAM 是 4GB 是否有某种方法可以让 64 位 VM 使用 8 字节对象头而不是 12 字节对象头 或者说在 Linux 上是这样的 如果不是在 Windows 上的话 有人可以用这段代码测试一下吗 imp
  • MySQL 案例/如果/那么

    我正在尝试在 MySQL 中构建一个查询 其中我有某个东西的数字库存水平 并且根据该库存水平 我希望它返回另一个值 即颜色代码 例如 如果库存水平 10000 则为绿色 这是我的例子 我有一个 Beer 表 用于保存啤酒信息 还有一个 Be
  • Windows 上使用 YouCompleteMe 完成 Vim 补全

    我拼命地想要得到你使我完整在 Windows 上工作 作者明确表示没有对 Windows 的官方支持 所以这是公平的 虽然有a wiki要在 Windows 上构建它 你会发现 1 2 的人在线声称他们在 Windows 上成功构建了它 而
  • JavaMail 问题:无法向 SMTP 主机发送命令

    我正在尝试执行 java 邮件 但收到错误 无法将命令发送到 SMTP 主机 任何帮助 将不胜感激 如果可能的话 以及任何未来问题的解决方案 确切的异常是 javax mail MessagingException Can t send c
  • Hibernate 支持嵌套事务吗?

    如果我有这个 Start transaction1 Call someMethod Start transaction2 Call someOtherMethod Start tranaction3 如果transaction3回滚 tra
  • 如何获取R中函数的包名? [复制]

    这个问题在这里已经有答案了 我正在调试一些代码 我想我可能在两个包中有两次相同的功能 我想输出函数的包名称 因为它将由 R 控制台执行 例子 function package name print gt 基础 function packag
  • jQuery - 确保检查所有单选组

    我想使用 jQuery 循环访问多个 动态 单选按钮组 如果有任何一个没有进行选择 它会抛出错误并停止表单提交 这是我迄今为止的努力 form submit function radio each function if this val
  • 使用xchg时需要mfence吗

    我有一套并进行测试xchg基于装配锁 我的问题是 我们是否需要使用内存防护 mfence sfence or lfence 当使用xchg操作说明 Edit 64 位平台 采用 Intel nehalem 正如其他答案中所述 这里的锁前缀是
  • 通过 ssh (gitosis) 访问 git 存储库时如何包含 ssh 私钥 rsa 密钥?

    此时我已经通过 gitosis 添加了一个 git 存储库 我使用的手册是http scie nti st 2007 11 14 hosting git repositories the easy and secure way 我可以克隆它
  • djangorest框架https用于绝对url?

    即使页面是使用 https 加载的 托管 api 的服务器也会返回 http 的绝对 URL 这是否与 django Rest 框架有关 因为似乎没有任何明显的方法可以解决这个问题 相关的是 Meta 类中的 url 字段 class Ne
  • 在元组列表上使用二等分,但仅使用第一个值进行比较

    I read 那个问题关于如何使用bisect在元组列表上 我用这些信息来回答那个问题 它有效 但我想要一个更通用的解决方案 Since bisect不允许指定key函数 如果我有这个 import bisect test array 1
  • 获取客户端的IP地址

    以前在asp net的其他版本中 我使用过这些属性HttpRequest Request ServerVariables REMOTE ADDR Request UserHostAddress 如何在 ASP NET Core 中实现相同的
  • 在圆环(环)内生成均匀随机点[重复]

    这个问题在这里已经有答案了 可能的重复 在环内创建随机数 我想获得一个均匀获得的随机点annulus 即位于半径圆内的面积R1 但在半径圆之外R2 where R1 gt R2并且两个圆的圆心都在同一点 我想避免使用拒绝抽样 如果可能的话
  • python列表到csv文件,每个项目都在新行中

    我正在尝试编写一个函数 该函数接受字符串列表并将列表中的每个字符串作为单独的行写入 csv 文件中 但我没有得到任何输出 你能帮我理解我做错了什么吗 这是我的代码 import sys import os import csv list e
  • 通过内存地址获取对象

    我正在尝试寻找在 R 中制作链接列表的方法 I found tracemem 返回对象的内存地址 那么有什么方法可以通过内存地址找到对象呢 那不是这样做的方法 如果您想要引用 请使用引用类或环境 像这样 首先 我将把三个对象放入链接列表中
  • 未调用 WSFederationAuthenticationModule.RedirectingToIdentityProvider 事件

    我的 Global asax cs 文件中有 2 个事件 WSFederationAuthenticationModule SecurityTokenValidated and WSFederationAuthenticationModul
  • 使用指针修改字符串时发生分段错误?

    Context 我正在学习 C 并且正在尝试使用指针反转字符串 我知道你可以使用数组 这更多的是关于学习指针 Problem 当尝试运行下面的代码时 我不断遇到分段错误 GCC似乎不喜欢 end begin line 这是为什么 特别是因为
  • VM 初始化期间发生错误无法为对象堆保留足够的空间无法创建 Java 虚拟机

    我一个多月以来一直面临这个问题 这是我在命令行运行java时看到的 java Xmx1300m Error occurred during initialization of VM Could not reserve enough spac
  • 是否有一种直接的方法来停止服务以响应用户单击通知?

    我想要以下行为 用户单击通知 Android 停止我的服务 问题是停止服务需要调用 stopService 而我无法轻松创建执行此操作的 PendingIntent 因此 我发现做到这一点的唯一方法是让我的服务接收一个特殊的 Intent
  • C++ 和 QML 之间的通信

    This page展示如何从 QML 中调用 C 函数 我想做的是通过 C 函数更改按钮上的图像 触发状态更改或无论如何完成 我怎样才能实现这个目标 UPDATE 我尝试了 Radon 的方法 但是当我插入这一行时立即 QObject te