开源 C++ QT QML 开发(一)基本介绍

文章的目的为了记录使用QT QML开发学习的经历。开发流程和要点有些记忆模糊,赶紧记录,防止忘记。

相关链接:

推荐链接:

开源 C# 快速开发(一)基础知识

开源 C# 快速开发(二)基础控件

开源 C# 快速开发(三)复杂控件

开源 C# 快速开发(四)自定义控件--波形图

开源 C# 快速开发(五)自定义控件--仪表盘

开源 C# 快速开发(六)自定义控件--圆环

开源 C# 快速开发(七)通讯--串口

开源 C# 快速开发(八)通讯--Tcp服务器端

开源 C# 快速开发(九)通讯--Tcp客户端

开源 C# 快速开发(十)通讯--http客户端

开源 C# 快速开发(十一)线程

开源 C# 快速开发(十二)进程监控

开源 C# 快速开发(十三)进程--管道通讯

开源 C# 快速开发(十四)进程--内存映射

开源 C# 快速开发(十五)进程--windows消息

开源 C# 快速开发(十六)数据库--sqlserver增删改查

本章节主要内容是:QT中使用QML进行开发的有点和场景。

1.优点

2.场景

一、优点

QML开发的主要优点,可以分为几个方面:

1. 开发效率与易用性// 声明一个蓝色的矩形,里面有个居中的文本

复制代码
  Rectangle {
      width: 200
      height: 100
      color: "blue"
      
      Text {
          anchors.centerIn: parent
          text: "Hello, World!"
          color: "white"
      }
  }

相比之下,用传统命令式代码实现同样的效果需要写更多行代码。

  • 易于学习和上手: 对于有Web开发背景(尤其是HTML/CSS)的开发者来说,QML的语法和结构非常熟悉,学习曲线平缓。即使是新手,也能快速构建出漂亮的界面。

  • 强大的集成开发环境: Qt Creator IDE为QML开发提供了极佳的支持,包括:

    • 所见即所得的UI设计器: 可以直接拖放组件来设计界面。

    • 实时预览: 修改QML代码后,可以几乎实时地看到界面变化,极大地提高了开发效率。

    • 强大的调试工具: 可以调试QML和JavaScript代码,检查对象树和属性。

2. 性能与表现力

  • 硬件加速的图形渲染: QML场景图默认使用OpenGL(或其他图形API,如Vulkan、Metal)进行渲染,能够充分利用GPU。这使得实现流畅的动画、复杂的视觉效果和60FPS的流畅界面成为可能。// 鼠标悬停时,矩形在0.2秒内变为红色

复制代码
  Rectangle {
      id: myRect
      width: 100; height: 100
      color: "green"
      
      Behavior on color {
          ColorAnimation { duration: 200 }
      }
      
      MouseArea {
          anchors.fill: parent
          hoverEnabled: true
          onEntered: myRect.color = "red"
          onExited: myRect.color = "green"
      }
  }
  • 原生般的性能: 当与C++后端结合时,QML应用既能拥有漂亮的界面,又能获得接近原生的性能。逻辑计算密集的任务可以用高效的C++完成,而UI展示和交互则由QML负责,做到了性能与美感的平衡。

3. 架构与可维护性

  • 清晰的关注点分离: QML鼓励采用MVVM(Model-View-ViewModel)或类似MVC的架构 。QML负责View(视图),C++负责Model(模型)和复杂的业务逻辑。这种分离使得代码更清晰、更易于测试和维护。// MyButton.qml

复制代码
  Rectangle {
      id: root
      // 定义自定义属性
      property alias text: label.text
      signal clicked
      
      // ... 按钮的样式和交互逻辑
      
      Text { id: label; anchors.centerIn: parent }
      MouseArea { onClicked: root.clicked() }
  }

  // 在别处使用自定义按钮
  MyButton {
      text: "Click Me"
      onClicked: console.log("Button clicked!")
  }

4. 跨平台能力

  • "一次编写,到处部署": 作为Qt的一部分,QML继承了其强大的跨平台能力。同一套QML UI代码,只需少量或无需修改,就可以编译和运行在:

    • 桌面平台: Windows, Linux, macOS

    • 移动平台: Android, iOS

    • 嵌入式设备: 各种嵌入式Linux系统、QNX、INTEGRITY等。

    • 车机系统: Qt for Automotive

    • 微控制器: 通过Qt for MCUs,可以在资源受限的设备上运行QML。

5. 强大的后端集成// C++ 后端

复制代码
  class Backend : public QObject {
      Q_OBJECT
      Q_PROPERTY(QString data READ data NOTIFY dataChanged)
  public:
      // ... 
  signals:
      void dataChanged();
  };

  // 注册到QML引擎
  engine.rootContext()->setContextProperty("backend", new Backend);

  // QML 前端
  Text { text: backend.data } // 直接绑定C++属性

二、场景

QML开发的主要用途:

1. 桌面应用程序

跨平台桌面应用

  • 办公软件:文档编辑器、邮件客户端、日历应用

  • 多媒体应用:音乐播放器、视频播放器、图片查看器

  • 工具软件:系统监控工具、文件管理器、开发工具

示例:WPS Office、VirtualBox管理界面、各种跨平台工具

2. 移动应用程序

Android和iOS应用

  • 社交应用:聊天软件、社交媒体客户端

  • 工具应用:计算器、笔记应用、天气预报

  • 企业应用:内部管理系统、数据展示应用

示例:VLC移动版、一些企业的内部移动应用

3. 嵌入式系统和工业应用

汽车行业

  • 车载信息娱乐系统(IVI)

  • 数字仪表盘

  • 中控台界面

  • 抬头显示(HUD)

示例:宝马、奥迪、特斯拉等车载系统(部分版本)

工业控制

  • 人机界面(HMI)

  • 监控系统

  • 控制面板

  • 数据采集与监视控制(SCADA)系统

医疗设备

  • 医疗仪器界面

  • 病人监护系统

  • 诊断设备显示

4. 消费电子产品

智能家居

  • 智能电视界面

  • 智能音响控制面板

  • 家庭自动化系统界面

  • 路由器管理界面

物联网设备

  • 智能手表界面

  • 智能家电控制面板

  • 工业物联网网关界面

5. 专业设备和仪器

科研仪器

  • 实验室设备控制界面

  • 测量仪器显示

  • 科学数据可视化

音视频设备

  • 音频混音器界面

  • 视频编辑软件

  • 广播设备控制面板

6. 信息显示系统

数字标牌

  • 广告播放器

  • 信息查询终端

  • 机场/车站信息显示屏

控制中心

  • 指挥控制中心大屏

  • 安防监控系统

  • 数据中心监控

7. 游戏和娱乐

游戏开发

  • 2D游戏界面

  • 游戏菜单系统

  • 游戏工具编辑器

娱乐系统

  • 卡拉OK点唱界面

  • 游艺设备控制界面

  • 虚拟现实应用界面

8. 原型设计和概念验证

快速原型

  • UI/UX设计验证

  • 产品概念演示

  • 客户需求确认

相关推荐
追烽少年x2 小时前
Qt中使用日志---Log4Qt
qt
tt666qq2 小时前
linux进程与服务
linux·运维·网络
青草地溪水旁2 小时前
从“快递签收规则”看 sigaction:信号处理的“总开关”
linux·信号处理
云泽8082 小时前
Linux 入门指南:从零掌握基础文件与目录操作命令
linux·运维·服务器
Hello_wshuo2 小时前
记一次手机付费充电设备研究
linux·单片机
心灵宝贝3 小时前
unzip-6.0-21.el7.x86_64.rpm怎么安装?CentOS 7手动安装rpm包详细步骤
linux·运维·centos
molihuan3 小时前
开源 全平台 哔哩哔哩缓存视频合并 Github地址:https://github.com/molihuan/hlbmerge_flutter
android·flutter·缓存·ffmpeg·开源·github·音视频
报错小能手3 小时前
linux学习笔记(11)fork详解
linux·笔记·学习
努力学习的小廉4 小时前
深入了解linux网络—— 基于UDP实现翻译和聊天功能
linux·网络·udp