如何在 C++ 端获取 QQuickItem 的有效实例

2023-12-13

好吧。我进行了很多搜索,但还没有找到好的解决方案。我是新来的Qt。我有一堂课是QQuickItem像这样,

class MyQuickItemClass : public QQuickItem
{
    Q_OBJECT
    SetInfo(SomeCppClass object)
};

I do a qmlRegisterType in my main.cpp将其注册到qml侧面像这样

qmlRegisterType("MyQ​​uickItemClass", 1, 0, "MyQuickItemClass");

到这里一切都很好。但是 -> 我想在 MyQuickItemClass 中设置一个对象实例和一些属性,其中还有一些 C++ 逻辑,然后传递MyQuickItemClass反对qml。或者,获取一个有效的实例MyQuickItemClass来自 Qml。我怎样才能获得有效的实例MyQuickItemClass对象实例来自QML在 C++ 方面main.cpp ?

我尝试从链接中进行以下学习here。但这种技术创建了两个独立的对象MyQuickItemClass。一份来自QML, & 之一来自c++边。因此对我不起作用。

以下是我经过大量搜索后尝试执行此操作的方法。

int main(int argc, char *argv[]) 
{
  qmlRegisterType< MyQuickItemClass >("MyQuickItemClass", 1, 0, "MyQuickItemClass");
  QQmlApplicationEngine engine;
  SomeCppClass someCppClassObject;
  someCppClassObject.updateSomething();

  MyQuickItemClass myquickItemObject;
  myquickItemObject.SetInfo(someCppClassObject);
  engine.rootContext()->setContextProperty("myquickItemObject", &myquickItemObject);

  engine.load(QUrl(QStringLiteral("qrc:/qml/main.qml")));
  return app.exec();
}

但是,执行上述操作会得到以下构造函数MyQuickItemClass打了两次电话。曾经从cpp当我创建一个对象时,并且一旦从qml边。通过在构造函数中放置断点来验证这一点MyQuickItemClass以及。因此,someCppClassObject我设置的里面是空的MyQuickItemClass当程序运行时。因为 qml 已经进行了最后的调用MyQuickItemClass实例化,从而忽略MyQuickItemClass我创建的对象main.cpp.

这是我的qml代码为MyQuickItemClass:

import QtQuick 2.5
import MyQuickItemClass 1.0

ParentContainerItem {
  id: parentItem
  color: "black"

  MyQuickItemClass {
      id: myQuickItemID
      visible: true
      objectName: "myQuickItem"

      property bool someProperty1: false
      property bool someProperty2: true

      anchors.top: parent.top
      anchors.horizontalCenter: parent.horizontalCenter
  }

  //Other qml components
}

这是需要将其对象设置为的 C++ 类MyQuickItemClass.

SomeCppClass {
  //Pure C++ class. No Qt
}

请注意,我需要保留MyQuickItemClass源自QQuickItem。请建议...


一般来说,避免访问 QML 实例化对象是一个好主意from outside由于大多数访问方法都会生成从 C++ 到 QML 的依赖关系,从而限制了 QML 树的完成方式。

例如。要求某些对象在某个时间点存在,具有特定的objectName价值观等

最好通过调用公开的 C++ 对象/API 上的方法从 QML 端“注册”对象,或者让 QML 从其自己的 C++ 代码中实例化对象注册本身。

后者显然本质上是自动的,即此类的每个实例都会执行此操作,而前者则由 QML 代码自行决定它想要了解哪些创建的实例。

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

如何在 C++ 端获取 QQuickItem 的有效实例 的相关文章

随机推荐

  • 在 msvc 中引用临时文件

    为什么它可以在 MS Visual C 上编译 struct myClass void func myClass arg void main func myClass works even though func only takes my
  • 如何检查模块是否已导入?

    如何检查我是否在代码中的某个位置导入了模块 if not has imported somemodule print you have not imported somemodule 我想检查是否已经导入了模块的原因是因为我有一个不想导入的
  • 使 Tkinter 窗口显示在任务栏中

    我希望我的程序显示在任务栏中 但仍然没有传统的 Windows 边框 我该怎么办 我知道self overrideredirect 1 但是这会将我的程序从任务栏中删除 这是针对 Windows 7 的 我并不认为这是 正确 的方法 但看看
  • 获取连接到 C# .NET WebAPI 应用程序的客户端的 IP 地址

    我试过 private const string HttpContext MS HttpContext private const string RemoteEndpointMessage System ServiceModel Chann
  • zend 与 select 的关系

    我是 zend 的新手 我被要求重新开发一个曾经用纯 PHP 编写的网站并将其放入 zend 框架中 我在数据库关系方面遇到很多麻烦 我似乎无法专心定义和查询关系 我想找一个类别 从该类别中 我希望能够找到与其关联的所有类别信息 并能够查询
  • 是否可以使用Python的requests库设置代理链?

    标准情况如下 公司的安全策略要求所有员工使用公司的代理服务器 需要授权 来获取任何 https 资源 为了通过 Python 解释器成功使用任何互联网连接 我必须手动 set HTTP PROXY http
  • 价格 woocommerce 中的小数分隔符

    Hi everyone I have this configuration in my woocommerce And in my product I have this 但当我显示价格时 它返回 4 95 而不是 4 95 我用这个来获取
  • 在 Hibernate 中混合 HQL 和 Criteria API

    是否可以混合使用 HQL 和 Criteria API 我有一个String包含 HQL 中的 where 条件和Criteria它已经建成并从其他地方获得 我想知道是否可以添加where条件String to Criteria add w
  • 使用 Spring CloudVault 时应用程序初始化时出现禁止错误

    使用 Spring Cloud HOXTON SR6 和 Spring boot 2 3 2 启动服务时 尝试访问 secret application 和 secret application profile 时出现 403 错误 这些路
  • 按自定义顺序对字符串数组进行排序

    我想按照我提到的顺序对字符串数组中的一组固定字符串进行排序 例如 文本文件 图像文件 音频文件 视频文件 应用程序文件 其他文件 示例1 如果我的字符串数组输入是这样的 inputval 0 Other files inputval 1 I
  • 用于获取 JavaFX WebView 控制台事件的公共 API 是什么?

    我想记录 WebView 控制台事件 他们有时会发现所使用的底层浏览器中的怪癖 并可以帮助排除故障 可以使用 Sun 实现类与 WebView 控制台交互 import WebConsoleListener setDefaultListen
  • 将方法指针从 C# 传递到 Delphi DLL

    我在将字符串作为 PChar 传递到 Delphi 构建的 DLL 时遇到了一些问题 感谢 Jens M hlenhoff 解决了它 现在我有另一个问题 如果 Delphi 声明是常规类型过程 则在传递给 DLL 时我已成功回调 c 方法
  • 将 razor 视图渲染为字符串而不修改 html

    我之前找到过有关如何将 MVC 4 视图渲染为字符串的答案 但是 我开始使用视觉工作室2013而现在的结果并不如预期 见下文 lt A gt lt B gt lt C gt class panel lt D gt gt lt E gt cl
  • MongoDB 和类验证器唯一验证 - NESTJS

    TL DR 我正在尝试在我的验证器中运行猫鼬查询 您好 我正在尝试制作一个自定义装饰器 如果该字段的值已存在 它会抛出错误 我正在尝试在验证路线的类中使用猫鼬模型 与解析器 控制器不同 InjectModel 不适用于验证器类 我的验证器是
  • 使用 jquery ui 模式对话框提交表单

    提交表单时 我在使用 JQuery UI 模态对话框时遇到困难 目的是您点击提交按钮 模式弹出窗口 根据您在模式中的选择 表单要么提交 要么不提交 相反 模式会弹出并自动提交 前端 div title Basic dialog p Plea
  • 如何将 JavaScript 对象编码为 JSON?

    有没有一种将 JavaScript 对象编码为 JSON 的好方法 我有一个键值对列表 其中名称来自复选框 并且值根据该框是否被选中而为 true 或 false var values checks checkbox each functi
  • 在颜色空间中的scale_fill/color中粘贴名称不能循环工作

    使用时缩放填充连续发散 from colorspace里面一个for loop or function不粘贴name图例标题并通过错误 如下例所示 library ggplot2 library colorspace set seed 10
  • 尝试用 JPanel 画线

    我正在尝试使用画线JPanel我已经碰壁了 我可以将两侧朝下 但是一旦涉及到从 x 线中减去 一切都会出错 package GUIstuff import java awt Graphics import javax swing JPane
  • 为什么无符号n位整数的最大值是2ⁿ-1而不是2ⁿ?

    The maximum value of an n bit integer is 2n 1 Why do we have the minus 1 Why isn t the maximum just 2n The 1因为整数是从0开始的 但
  • 如何在 C++ 端获取 QQuickItem 的有效实例

    好吧 我进行了很多搜索 但还没有找到好的解决方案 我是新来的Qt 我有一堂课是QQuickItem像这样 class MyQuickItemClass public QQuickItem Q OBJECT SetInfo SomeCppCl