C++ 应用程序中的 QML 或反之亦然 [关闭]

2023-12-19

考虑一个简单的 GUI 显示相当复杂的计算输出的情况。

现在我想使用编写一个漂亮的自定义 GUIQML.
我还想写我的后台应用程序QT C++.

我坐在 QT 文档前,想知道 如果我
1)应该写一个QML应用并以某种方式将我的 C++ 类嵌入其中 (这是绝对可能的)或者如果我
2)应该写一个C++应用程序并以某种方式在其中嵌入 QML GUI 并修改我的类中的 QML 属性 (这又是可能的)

我已经使用 GUI 的 QT Widgets 用 C++ 编写了所有内容。我只想将 GUI 移至 QML 并保留 C++ 类,即使我愿意重写 GUI 的界面。

可能的答案:

下面标记的解决方案建议保留 C++ 类并通过信号和槽专门连接 GUI。所以基本上我最终得到了一个 main.cpp 来实例化我的主工作类并显示 QML GUI,如下所示:

QQuickView viewer;
viewer.setSource(QUrl("./qml/main.qml"));
viewer.show();

然后我添加了 myClass 并得到了一个对象来进行连接:

MyClass myClass;
QQuickItem* item = viewer.rootObject();
QObject::connect(item, SIGNAL(buttonClicked()), &myClass, SLOT(mySlot()));
QObject::connect(&myClass, SIGNAL(mySignal(QVariant)), item, SLOT(updateGUI(QVariant)));

在 C++ 类中实现槽和信号时,必须使用 QVariant 对象来传输数据。然后 QML 文件实现信号,例如用于单击按钮和插槽来接收要显示的数据。

这正是我所希望的。对我的非 GUI 代码的唯一更改是通过信号和插槽进行所有交互。现在我什至可以在我的应用程序中使用这两种 GUI(QML / Widget)。


只需用 C++ 编写核心逻辑,将其与信号和槽连接,您就可以将相同的组件与小部件和 QML 一起使用。

这不是火箭科学,C++ 逻辑允许与 C++ 和 QML 一起使用,JS 逻辑 - 仅限 QML。 C++ 和 Qt API 是更完善的解决方案,因为从 JS 中您实际上无法访问 Qt API 的那么多功能,只有少数方法被“移植”到 QML 世界中。但所有高性能数据容器和执行性能本身都是用C++实现的。

如果您只需要显示结果并且控制台不够好,我宁愿保留 QtWidgets,因为添加声明性模块会显着减慢编译速度。小部件模块现在是独立的,因此您甚至可以使用 QtWidgets 添加“额外”模块(在 Qt4 中它是 QtGui 的一部分),但它更轻。使用小部件对核心逻辑进行原型设计后,您可以实现 QML 接口,并将其连接到现有信号/槽/属性以及使用它们的绑定。

不,您不能将 QML 嵌入到 C++ 类中,恰恰相反,C++ 是较低级别的层,用于创建 QML 组件。至于实际的实例化,你可以采用两种方法 - 如果你注册一个QObject基于 QML 引擎的类,您可以在 QML 中实例化它。或者,您可以在 C++ 中实例化该类,并仅使其在 QML 上下文中可用 - 这并不重要。如果您需要单个对象,最好在 C++ 中实例化它main()函数并使其在 QML 上下文中可用,如果它是您打算大量实例化的组件 - 那么创建一个 QML 组件。

如果您也愿意,您可以在 QML 中使用 JS 构建核心逻辑原型,然后将其移植到 C++。这看起来像是事倍功半,但如果你把床铺好,它实际上会提高生产力,因为 QML 中的原型设计要快得多,捕获错误会更安全、信息更丰富,而且如果你的 API 做得很好,那么可以移植 JS 代码到 C++ 通常是一个小麻烦 - 替换一些vars 与具体类型,替换一些. with ->诸如此类的事情。

您真正想要最终在 C++ 中进行的任何“详细计算”。每次计算完成时,您可以简单地将其作为信号发出,并自动将结果显示到信号连接的任何插槽中,无论是在小部件中还是在 QML 中,甚至同时显示在两者中。

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

C++ 应用程序中的 QML 或反之亦然 [关闭] 的相关文章

  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • 使用 awk 或 sed 不可能进行负向前瞻,但仅 Perl 支持

    我有跨多行的文本 someabove text jpqpq mcvnmcv s ql pw lt lt lt lt lt lt uyuuey middle text jhasjh dsadsas grqywtrt klklk lt lt l
  • 什么是Environment.FailFast?

    什么是Environment FailFast 它有什么用 它用于终止应用程序 它是一种静态方法 可以立即终止应用程序 而不会被任何异常块捕获 Environment FastFail String 可以 实际上是一个很棒的调试工具 例如
  • 同一视图控制器中的 AWS AppSync 多个订阅不起作用 - iOS Swift

    仅供参考我发布了这个问题在 AWS AppSync 论坛中 以防将来 AWS 回答它 我一直在尝试制作一个简单的帖子应用程序 例如docs https docs aws amazon com appsync latest devguide
  • 在两个应用程序之间共享数据

    像这样 public class MyClass public static instance new MyClass private List
  • if 语句无法批处理(直接转到 else)

    我只是为我的批处理文件设置密码 但是 我的 if 语句不起作用 当我要求它检查我的密码是否正确时 即使我正确输入了密码 嗨 它也会转到 else 语句 这是我的代码中有问题的部分 if R hi goto b else echo acces
  • java相当于php的hmac-SHA1

    我正在寻找与此 php 调用等效的 java hash hmac sha1 test secret 我尝试过这个 使用java crypto Mac http docs oracle com javase 7 docs api javax
  • 如何获得正确的路径大小写?

    我有一个小但很痒的问题 如何在 Qt 中获取 Windows 路径的正确大小写 假设我有一条路c documents and settings wolfgang documents存储在一个QString str我想知道正确的情况 在这里C
  • 如何创建整数列表的二维列表并设置特定值

    如何创建一个像这样的矩阵 我不想使用numpy 0 1 2 3 4 5 1 0 0 0 0 0 2 0 0 0 0 0 3 0 0 0 0 0 4 0 0 0 0 0 我已经尝试过这个 这是错误的 class MinimiumEdits o
  • 我可以停止缩放时调整元素大小吗?

    我有一个标准网站 当用户放大 CTRL 时 如何防止元素调整大小 据我所知 没有办法防止用户放大时项目缩放 可能有一种方法捕获缩放事件 https stackoverflow com questions 995914 catch brows
  • UITableView 的“反弹区域”中的浅灰色背景

    Apple 的 iPhone 应用程序 例如 Music 和 Contants 使用 UITableView 中的搜索栏 当您向下滚动以使搜索栏向下移动时 滚动视图内容上方的空白区域具有浅灰色背景颜色 请参见屏幕截图 请注意 搜索栏顶部有一
  • 使用 python 在命令行上键入即可完成

    我想用 python 编写一个小型应用程序 目录 文件启动器 为了使其快速 我想自动完成 自动建议条目 但我想显示 这些建议会随着用户的输入而出现 根据我读到的有关 readline 模块完成的内容是 只能使用 完成热键 例如标签 有什么建
  • 快速处理位置权限

    我正在尝试实现一个基本的地图视图并将用户的当前位置作为注释添加到地图中 我已将 requestwheninuse 密钥添加到我的 info plist 并导入 coreLocation 在我的视图控制器的 did load 方法中 我有以下
  • 如何检查自定义模型绑定器内的属性属性

    我想强制系统中的所有日期均有效且不是将来的日期 因此我在自定义模型绑定器中强制执行它们 class DateTimeModelBinder IModelBinder public object BindModel ControllerCon
  • Eclipse 在调试模式下继续部署到设备

    在部署到我的设备一次进行调试后 每次我尝试在常规模式下 运行为 时 它仍然会附加调试器 我已从设备中删除了该应用程序 但它仍然如此 当我只想运行该应用程序而不受笔记本电脑的束缚时 这会导致并出现问题 还有其他人遇到过这个问题吗 如果是这样
  • 创建下拉按钮以根据分类列进行过滤

    我有一个像这样的数据框 import pandas as pd df pd DataFrame df category G1 G1 G1 G1 G1 G1 G1 G2 G2 G2 G2 G2 G2 G2 df date 2012 04 01
  • 如何在 Kotlin 中声明具有两种类型的变量,例如 val x:Int 或 String

    我要写一个像这样的方法 object UIBehavior fun dialog context Context title Int String message Int String val dialogObj AlertDialog B
  • R将多个url放入lapply中

    我有一个字符向量中的 url 列表 我想在 查询 因为如果不是 则 x 查询将被拒绝 urls c url1 url2 url3 这是我想做的 htmlpages lapply urls function x readLines x Sys
  • 当单元格内有文本时如何获得表格单元格的正确高度

    历史 形状大小不等于表格单元格大小并适合形状内的文本 https stackoverflow com questions 63428548 shape size not equal to the table cell size and fi
  • NuGet 不复制配置文件

    我现在尝试了很多不同的事情 但似乎都没有达到预期的效果 我想与我的库共享一个示例配置 或图像或其他 文件 有人可以使用它并从中派生 我尝试默认为只是为了这样做 我尝试通过以下方式将其包含在 nuget 包中 nuspec并通过 csproj
  • C++ 应用程序中的 QML 或反之亦然 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 考虑一个简单的 GUI 显示相当复杂的计算输出的情况 现在我想使用编写一个漂亮的自定义 GUIQML 我还想写我的后台应用程序QT C 我坐在