QML 与 QWidget:联系、区别与使用场景

文章目录

前言

一、QML 与 QWidget 的联系

1.1 同属 Qt 框架

1.2 共享底层功能

1.3 混合使用

二、QML 与 QWidget 的区别

2.1 技术架构

2.2 开发效率

2.3 界面表现力

2.4 性能

2.5 跨平台支持

三、使用场景

3.1 QWidget 的使用场景

3.2 QML 的使用场景

四、QML 与 QWidget 的混合使用

4.1 在 QWidget 中嵌入 QML

4.2 在 QML 中调用 QWidget

总结


前言

在 Qt 框架中,QML 和 QWidget 是两种不同的技术,用于构建用户界面。它们各有优缺点,适用于不同的场景。本文将详细介绍它们的联系、区别以及使用场景。

一、QML 与 QWidget 的联系

1.1 同属 Qt 框架

QML 和 QWidget 都是 Qt 框架的一部分,可以用于开发跨平台的桌面、移动和嵌入式应用程序。

1.2 共享底层功能

它们都基于 Qt 的核心功能(如信号与槽、事件处理等),并且可以与 C++ 代码无缝集成。

1.3 混合使用

在同一个项目中,QML 和 QWidget 可以混合使用。例如,可以在 QWidget 应用程序中嵌入 QML 界面,或者在 QML 应用程序中调用 QWidget 组件。

二、QML 与 QWidget 的区别

2.1 技术架构

  • QWidget:基于传统的面向对象编程模型,使用 C++ 代码构建界面。
  • QML:基于声明式编程模型,使用 QML 语言和 JavaScript 构建界面。

2.2 开发效率

  • QWidget:需要编写大量 C++ 代码,开发效率较低。
  • QML:声明式语法简洁直观,开发效率高。

2.3 界面表现力

  • QWidget:界面风格受限于操作系统,表现力有限。
  • QML:支持丰富的动画、过渡效果和自定义样式,表现力强。

2.4 性能

  • QWidget:基于 CPU 渲染,性能稳定,适合复杂界面。
  • QML:基于 GPU 渲染,性能较高,但在低端设备上可能表现不佳。

2.5 跨平台支持

  • QWidget:支持桌面平台(Windows、Linux、macOS),但对移动平台支持有限。
  • QML:支持所有平台(桌面、移动、嵌入式),是跨平台开发的首选。

三、使用场景

3.1 QWidget 的使用场景

  • 传统桌面应用:如办公软件、开发工具等。
  • 复杂界面:需要大量自定义控件和复杂布局的界面。
  • 性能敏感应用:如实时数据监控、科学计算等。

3.2 QML 的使用场景

  • 现代用户界面:如移动应用、嵌入式设备界面等。
  • 动画和特效:需要丰富动画和过渡效果的界面。
  • 快速原型开发:需要快速迭代和验证的界面设计。

四、QML 与 QWidget 的混合使用

4.1 在 QWidget 中嵌入 QML

通过 QQuickWidget 或 QQuickView 将 QML 界面嵌入到 QWidget 应用程序中,如下即为在QWidget中嵌入QML的示例代码:

#include <QApplication>
#include <QQuickWidget>
#include <QVBoxLayout>
#include <QWidget>int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;QVBoxLayout *layout = new QVBoxLayout(&window);QQuickWidget *qmlWidget = new QQuickWidget;qmlWidget->setSource(QUrl("qrc:/main.qml"));layout->addWidget(qmlWidget);window.show();return app.exec();
}

4.2 在 QML 中调用 QWidget

通过 QWidget::createWindowContainer 将 QWidget 组件嵌入到 QML 界面中,如下即为在QML中调用QWidget的示例:

#include <QApplication>
#include <QQmlApplicationEngine>
#include <QWidget>class MyWidget : public QWidget {
public:MyWidget(QWidget *parent = nullptr) : QWidget(parent) {setStyleSheet("background-color: red;");}
};int main(int argc, char *argv[]) {QApplication app(argc, argv);QQmlApplicationEngine engine;engine.load(QUrl(QStringLiteral("qrc:/main.qml")));QWidget *jie= new jie;QWindow *container = QWidget::createWindowContainer(myWidget);engine.rootContext()->setContextProperty("myWidget", container);return app.exec();
}

 在 QML 中定义如下:

import QtQuick 2.12
import QtQuick.Window 2.12Window {visible: truewidth: 800height: 480Item {width: 200height: 200anchors.centerIn: parentQWidgetContainer {widget: myWidget}}
}

总结

QML 和 QWidget 是 Qt 框架中两种不同的界面技术,各有优缺点和适用场景。QWidget 适合传统桌面应用和复杂界面,而 QML 适合现代用户界面和快速开发。在实际项目中,可以根据需求选择合适的技术,甚至混合使用它们。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/22364.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu部署ktransformers

准备工作 一台服务器 CPU&#xff1a;500G GPU&#xff1a;48G&#xff08;NVIDIA4090&#xff09; 系统&#xff1a;Ubuntu20.04&#xff08;github的文档好像用的是22.04&#xff09; 第一步&#xff1a;下载权重文件 1.下载hfd wget https://hf-mirror.com/hfd/hfd.s…

【Elasticsearch】同一台服务器部署集群

【Elasticsearch】同一台服务器部署集群 1. 同一台服务器搭建ES集群2. 配置不同的node节点3. ES集群中安装IK分词器4. 启动es集群5. Kibana访问集群6. es-head7. 集群中创建索引7.1 什么是分片以及分片的好处7.2 副本&#xff08;Replication&#xff09;7.3 通过es-head创建索…

1-1 VS Code+Keil5+STM32CubeMX开发环境搭建

1.0 卸载相关程序 使用这个方式安装工具&#xff0c;先将原先下载安装的软件去掉&#xff0c;然后再安装新的软件&#xff0c;这个卸载过程需要将原来的工具干净的卸载掉&#xff0c;使用专门的卸载工具&#xff0c;将注册表等文件也全部删除掉。 对于STM32CubeMX还要删除&…

C# 从基础神经元到实现在0~9数字识别

训练图片:mnist160 测试结果:1000次训练学习率为0.1时,准确率在60%以上 学习的图片越多&#xff0c;训练的时候越长(比如把 epochs*10 10000或更高时)效果越好 using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Windo…

【算法与数据结构】单调队列

目录 单调队列 使用单调队列维护滑动窗口 具体过程&#xff1a; 代码实现&#xff1a; 复杂度分析&#xff1a; 使用单调队列优化动态规划 例题 单调队列 单调队列(deque)是一种特殊的队列&#xff0c;队列中的元素始终按严格递增或者递减排列。这样就可以保证队头元素…

矩阵的扩展运算(MATLAB和pytorch实例)

秩&#xff08;Rank&#xff09;的定义 秩的计算 初等行变换法&#xff08;最常用&#xff09;行列式法&#xff08;仅适用于方阵&#xff09; 满秩的分类方阵的满秩非方阵的满秩几何意义应用场景判断方法 矩阵的特征值 定义求解特征值 特征方程步骤 关键性质 迹与行列式相似矩…

python面试题整理

Python 如何处理异常&#xff1f; Python中&#xff0c;使用try 和 except 关键字来捕获和处理异常 try 块中放置可能会引发异常的代码&#xff0c;然后在except块中处理这些异常。 能补充一下finally的作用吗&#xff1f; finally 块中的代码无论是否发生异常都会执行&#xf…

linux之perf(17)PMU事件采集脚本

Linux之perf(17)PMU事件采集脚本 Author: Once Day Date: 2025年2月22日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: Perf性能分析_Once_day的博…

Java数据结构-排序

目录 一.本文关注焦点 二.七大排序分析及相关实现 1.冒泡排序 2.简单选择排序 3.直接插入排序 4.希尔排序 5.堆排序 ​编辑 6.归并排序 7.快速排序 一.本文关注焦点 各种排序的代码实现及各自的时间空间复杂度分析及稳定性。 时间复杂度&#xff1a;在比较排序中主…

改进收敛因子和比例权重的灰狼优化算法【期刊论文完美复现】(Matlab代码实现)

2 灰狼优化算法 2.1 基本灰狼优化算法 灰狼优化算法是一种模拟灰狼捕猎自然群体行为的社会启发式优化算法&#xff0c;属于一种新型的群体智能优化算法。灰狼优化算法具有高度的灵活性&#xff0c;是当前较为流行的优化算法之一。灰狼优化算法主要分为三个阶段&#xff1a;追…

创建Linux虚拟环境并远程连接

目录 下载VMware软件 下载CentOS 创建虚拟环境 远程连接Linux系统 下载VMware软件 不会的可以参考 传送门 下载CentOS 不会的可以参考 传送门 创建虚拟环境 打开VMware软件&#xff0c;创建虚拟机 选择典型安装 找到我们安装好的centOS文件&#xff0c;之后会自动检…

汽车智能制造企业数字化转型SAP解决方案总结

一、项目实施概述 项目阶段划分&#xff1a; 蓝图设计阶段主数据管理方案各模块蓝图设计方案下一阶段工作计划 关键里程碑&#xff1a; 2022年6月6日&#xff1a;项目启动会2022年12月1日&#xff1a;系统上线 二、总体目标 通过SAP实施&#xff0c;构建研产供销协同、业财一…

《Head First设计模式》读书笔记 —— 命令模式

文章目录 本节用例餐厅类比点餐流程角色与职责从餐厅到命令模式 命令模式第一个命令对象实现命令接口实现一个命令 使用命令对象NoCommand与空对象 定义命令模式支持撤销功能使用状态实现撤销多层次撤销 One One One …… more things宏命令使用宏命令 队列请求日志请求 总结 《…

基于YOLO11深度学习的运动鞋品牌检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

DAY08 List接口、Collections接口、Set接口

学习目标 能够说出List集合特点1.有序2.允许存储重复的元素3.有带索引的方法(练习 add,remove,set,get) 能够使用集合工具类Collections类:static void sort(List<T> list) 根据元素的自然顺序 对指定列表按升序进行排序。static <T> void sort(List<T> lis…

shell编程总结

前言 shell编程学习总结&#xff0c;1万3千多字带你学习shell编程 往期推荐 14wpoc&#xff0c;nuclei全家桶&#xff1a;nuclei模版管理工具Nuclei 哥斯拉二开&#xff0c;免杀绕过规避流量检测设备 fscan全家桶&#xff1a;FscanPlus&#xff0c;fs&#xff0c;fscan适用…

OpenAI ChatGPT在心理治疗领域展现超凡同理心,通过图灵测试挑战人类专家

近期&#xff0c;一项关于OpenAI ChatGPT在心理治疗领域的研究更是引起了广泛关注。据报道&#xff0c;ChatGPT已经成功通过了治疗师领域的图灵测试&#xff0c;其表现甚至在某些方面超越了人类治疗师&#xff0c;尤其是在展现同理心方面&#xff0c;这一发现无疑为AI在心理健康…

【智能客服】ChatGPT大模型话术优化落地方案

本文原创作者:姚瑞南 AI-agent 大模型运营专家,先后任职于美团、猎聘等中大厂AI训练专家和智能运营专家岗;多年人工智能行业智能产品运营及大模型落地经验,拥有AI外呼方向国家专利与PMP项目管理证书。(转载需经授权) 目录 一、项目背景 1.1 行业背景 1.2 业务现…

【JavaWeb12】数据交换与异步请求:JSON与Ajax的绝妙搭配是否塑造了Web的交互革命?

文章目录 &#x1f30d;一. 数据交换--JSON❄️1. JSON介绍❄️2. JSON 快速入门❄️3. JSON 对象和字符串对象转换❄️4. JSON 在 java 中使用❄️5. 代码演示 &#x1f30d;二. 异步请求--Ajax❄️1. 基本介绍❄️2. JavaScript 原生 Ajax 请求❄️3. JQuery 的 Ajax 请求 &a…

[Android]APP自启动

APP添加自启动权限&#xff0c;重启设备后自动打开APP。 1.AndroidManifest.xml <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.an…