Qt Quick Controls 原本是为支持桌面平台而开发的,后来又加入了移动平台和嵌入式平台的支持。它们应用非常广泛,因为它们提供了足够灵活的样式系统,以允许开发具有平台相关或者无关风格的应用程序。

在嵌入式系统中,硬件资源有限,这套系统可能是比较低效率的。而Qt Quick Controls 2正是为解决这样的问题而生的,可以使用基准测试来指导开发。

C++和QML

在许多情况下,C++对内部状态的处理会更加的高效。例如,对比C++处理events的过程,controls需要创建内部的MouseAreas并绑定Keys对象。

样式

不仅是在C++中处理事件和逻辑能提高性能,这还允许可视化的QML层成为更简单的声明式层。这反映在controls项目的结构上:所有可视化实现都位于imports文件夹中,这样,想要创建自己完整样式的用户就可以复制该文件夹并开始调整。看这里以了解更多关于样式插件的实现。

在Qt Quick Controls 2中,样式不再提供由controls实例化的组件(components),而是controls们包含可以被替代的item delegates。事实上,这代表delegates是现场实例化的Qt Quick item并且作为control的属性,然后再简单地把control作为父节点关联起来。

模块化和简单化

在遇到复杂地controls的情况下,有时候把它们分开成不同的块会更好一些。比如,一个复杂的ScrollView control:

ScrollView {
horizontalScrollBarPolicy: Qt.ScrollBarAlwaysOff
Flickable {
// ...
}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

而替换成简单的 ScrollBar/ScrollIndicator控件则可以被附加到任何的Flickable上:

Flickable {
// ...
ScrollBar.vertical: ScrollBar { }
}
  • 1
  • 2
  • 3
  • 4

Qt Quick Controls 2 API的目标是变得更简单明了。常规的操作很简单,而更复杂的操作则可以变成拷贝到你代码中的文档型代码块。

特性比照表

~ Qt Quick Controls Qt Quick Controls 2
样式化的delegates Yes Yes
内建原生styles Yes No
运行时style/theme切换 Yes1 Yes2
可用于Desktop Yes Yes
可用于Mobile Yes3 Yes
可用于Embedded Yes3 Yes
内部事件处理 QML C++

1.非官方支持,但是技术上可以通过私有API实现 
2.只有theme是可以在运行时切换的,而style则是固定的 
3.性能上可能不是最好的

迁移Qt Quick Controls的代码

Qt Quick Controls2的API跟Qt Quick Controls是十分相似的,但是其实际上为了改进,还是有些API被改变了。最多的改变就是样式方面的改变;所有控件的delegate都可以通过控件自身访问,而非通过分离的样式对象。

举个例子,要在Qt Quick Controls中设置Button的样式:

Button {
style: ButtonStyle {
label: Label {
// ...
}
}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

而在Qt Quick Controls2中,则像下面这样:

Button {
contentItem: Label {
// ...
}
}
  • 1
  • 2
  • 3
  • 4
  • 5
准备迁移

迁移到 Qt Quick Controls 2的一个比较好的办法是,将每个有自定义样式的控件放到一个单独的QML文件中。比如,上面Qt Quick Controls的button就可以移动到一个名为Button.qml的文件中,然后将这个文件放到一个名为controls的文件夹中,然后再按以下方式操作:

import "controls" as Controls

Controls.Button {
...
}
  • 1
  • 2
  • 3
  • 4
  • 5

这样的做法在新旧的模块中都能用,并能减少迁移开始时的工作量。

类型对照表

第一列列出了在Qt Quick Controls 1, Qt Quick Dialogs, 和 Qt Quick Extras中所有可用的类型,第二列则是Qt Quick Controls 2中对应的类型。如果没有直接替代方案,则第三列包含提供相关功能的备选方案。最后一列包含了在两个模块内的对应类型区别的说明。

Qt Quick Controls 1 Qt Quick Controls 2 备选方案 备注
Action Action Shortcut
(Qt Quick)
 
ApplicationWindow ApplicationWindow    
BusyIndicator BusyIndicator    
Button Button    
Calendar MonthGrid,
DayOfWeekRow,
WeekNumberColumn
(Qt Labs Calendar)
Qt Labs Calendar: MonthGrid, DayOfWeek, 和 WeekNumberColumn 属于未风格化的calendar视图
CheckBox CheckBox    
ComboBox ComboBox    
ExclusiveGroup ActionGroup,
ButtonGroup
(Qt Quick Controls 2)
Qt Quick Controls 2: ActionGroup 和 ButtonGroup 提供相似的功能
GroupBox GroupBox    
Label Label    
Menu Menu Menu
(Qt Labs Platform)
Qt Quick Controls 1: Menu是在Qt平台抽象层提供实现的平台上原生的。其他平台使用基于QML的顶级菜单弹出窗口。菜单支持传统的桌面风格联级子菜单,但是在嵌入式Linux上不管用,因为EGLFS不支持多个顶级窗口。
Qt Quick Controls 2: Menu是非原生、基于Item的,而是堆叠在应用程序内容之上的弹出窗口。因此,菜单弹出窗口被限制在窗口边界内。Menu完全可由QML和Qt Quick定制样式,并且可以允许添加任何的Item。传统桌面的特性(如联级子菜单和可视键盘快捷键)都不支持。
Qt Labs Platform: Menu是一个实验性的本地菜单,在不支持Qt平台抽象层提供实现的平台上,它会fallback到Qt Widgets。
MenuBar MenuBar MenuBar
(Qt Labs Platform)
Qt Quick Controls 1: MenuBar是在Qt平台抽象层提供实现的平台上原生的。其他平台使用堆叠在窗口顶部的基于QML的菜单栏项目。
Qt Quick Controls 2: MenuBar是基于QML并可以完全使用QML和Qt Quick定制样式的非原生menubar。
Qt Labs Platform: MenuBar是一个实验性的原生menubar。它只能用于支持Qt平台抽象层原生实现的平台。
MenuItem,
MenuSeparator
MenuItem,
MenuSeparator
MenuItem,
MenuSeparator
(Qt Labs Platform)
Qt Quick Controls 1: MenuItem 和 MenuSeparator在支持Qt平台抽象层实现的平台上是原生的。其他平台使用基于QML的menu item和separator。
Qt Quick Controls 2: MenuItem 和 MenuSeparator是基于QML并完全可用QML和Qt Quick定制样式的非原生item。
Qt Labs Platform: MenuItem and MenuSeparator是实验性的原生menu item和separator
ProgressBar ProgressBar    
RadioButton RadioButton    
ScrollView ScrollView    
Slider Slider    
SpinBox SpinBox    
SplitView    
StackView,
StackViewDelegate,
Stack
StackView   Qt Quick Controls 2: StackView通过一个单独的StackView类型提供可定制的转换和附加属性。
StatusBar ToolBar
(Qt Quick Controls 2)
Qt Quick Controls 2: ApplicationWindow允许分配任何的item或者控件比如ToolBar作为header或者footer。
Switch Switch    
TabView,
Tab
TabBar,
TabButton
(Qt Quick Controls 2)
Qt Quick Controls 2: TabBar 和 TabButton 提供了相似的函数,可以用来构建tabbed views。
TableView    
TextArea TextArea   Qt Quick Controls 1: TextArea 继承于ScrollView,因此它始终是个可滚动的editor。
Qt Quick Controls 2: TextArea 是一个可选择性附加到Flickable以提供滚动功能的简单多行editor。这就允许TextArea用于可滚动的页面而不会出现嵌套的可滚动区域,解决了可用性问题。
TextField TextField    
ToolBar ToolBar    
ToolButton ToolButton    
TreeView    
Qt Quick Dialogs Qt Quick Controls 2 备选方案 备注
Dialog Dialog Qt Quick Dialogs: Dialog可以是一个顶层窗口或者是一个基于Item的弹出内容,这取决于所在的平台是否支持多个顶层窗口。 
Qt Quick Controls 2: Dialog不是顶层窗口,而是堆叠在程序内容之上的基于Item的弹出内容,因此,dialog会被限制在窗口范围内。
ColorDialog,
FileDialog,
FontDialog,
MessageDialog
ColorDialog,
FileDialog,
FolderDialog,
FontDialog,
MessageDialog
(Qt Labs Platform)
Qt Quick Dialogs: Dialog在支持Qt平台抽象层实现的平台上是原生的.其他平台上使用Qt Widgets或者基于QML的dialog,这取决与其所在的平台是否支持多个顶层窗口。
Qt Labs Platform: 实验性的原生dialog,在不支持Qt平台抽象层实现的平台上,fallback到Qt Widgets。
Qt Quick Extras Qt Quick Controls 2 备选方案 备注
CircularGauge    
DelayButton DelayButton    
Dial Dial    
Gauge    
Picture    
PieMenu    
StatusIndicator    
ToggleButton    
Tumbler,
TumblerColumn
Tumbler   Qt Quick Extras: Tumbler可以包含多列。 
Qt Quick Controls 2: Tumbler代表一个单独的滚轮。多列的可以由多个Tumbler排列在一起组成。
之前没有的 Qt Quick Controls 2 备选方案 备注
AbstractButton    
ActionGroup ExclusiveGroup
(Qt Quick Controls 1)
Qt Quick Controls 1: ExclusiveGroup 提供类似功能
ButtonGroup ExclusiveGroup
(Qt Quick Controls 1)
Qt Quick Controls 1: ExclusiveGroup 提供类似功能
CheckDelegate    
Container    
Control    
Drawer    
Frame    
ItemDelegate    
Page    
PageIndicator    
Pane    
Popup    
RadioDelegate    
RangeSlider    
RoundButton    
ScrollBar,
ScrollIndicator
ScrollView
(Qt Quick Controls 1)
Qt Quick Controls 1: ScrollView提供了类似的功能。它结合了水平跟竖直的scrollbar,还有环绕这scroll view的背景页面。
StandardPaths
(Qt Labs Platform)
Qt Quick Dialogs: FileDialog提供了方便读取大部分标准路径的快捷属性。
Qt Labs Platform: StandardPaths提供了独立的类型以提供访问标准路径的方法。
SwipeDelegate    
SwipeView    
SwitchDelegate    
SystemTrayIcon
(Qt Labs Platform)
Qt Labs Platform: SystemTrayIcon 是一个实验性的系统原生的system tray icon。在不支持Qt平台抽象层实现的平台上会fallback到Qt WIdgets。
TabBar,
TabButton
TabView
(Qt Quick Controls 1)
Qt Quick Controls 1: TabView提供了类似的方法。它由tab bar,背景和围绕tab的页面组成。
ToolSeparator    
ToolTip   Qt Quick Controls 1: Button 和 Action有内建的基于Qt Widgets的tooltips。
Qt Quick Controls 2: ToolTip可以附加到任何的Item上。

原文链接

https://blog.csdn.net/MatchYang/article/details/79302172

Qt Quick Controls 与 Qt Quick Controls 2的区别(详细对照)的更多相关文章

  1. Qt 4.6: A Quick Start to Qt Designer

    Qt 4.6: A Quick Start to Qt Designer A Quick Start to Qt Designer Using Qt Designer involves four ba ...

  2. Qt开发技术:Qt拽拖开发(一)拽托框架详解及Demo

    前话   Qt中的拽拖操作详细介绍.   Demo 图片拽拖    控件拽拖    窗口拽拖    拽托框架(高级开发)        拖放(Drag and Drop)   拖放提供了一种简单的可视 ...

  3. QT征程之初识qt

    下载 https://www.qt.io/cn/download-open-source/     下载QT离线安装包 Qt 5.5.1 for Linux 32-bit (546 MB) (info ...

  4. Qt环境搭建(Qt Creator)

    简述 上一节中介绍了如何进行Qt和Visual Studio的下载安装,随后演示了如何将Qt集成到Visual Studio中,并完成了我们第一个Qt小程序-Hello World.下面主要讲解如何利 ...

  5. QT核心编程之Qt线程 (c)

    QT核心编程之Qt线程是本节要介绍的内容,QT核心编程我们要分几个部分来介绍,想参考更多内容,请看末尾的编辑推荐进行详细阅读,先来看本篇内容. Qt对线程提供了支持,它引入了一些基本与平台无关的线程类 ...

  6. QT-【转】Qt 4迁移至Qt 5

    将Qt 4代码迁移到Qt 5还是比较简单的.实际上,在Qt 5开发过程中就已经注意了与Qt 4代码保持兼容性. 与Qt 3到Qt 4的迁移不同,Qt 5的核心类库并没有做大的API的修改,只有几个新的 ...

  7. Qt4.7文档翻译:Qt样式单参考,Qt Style Sheets Reference(超长,超全)

    内容目录 Qt样式单参考 可进行样式设置的部件列表 属性列表 图标列表 属性类型列表 伪状态列表 子控件列表 Qt样式单参考 Qt样式单支持各种属性.伪状态和子控件,这样使得妳能够自行设计部件的外观. ...

  8. Qt for Windows:Qt 5.4.0 MinGW 静态编译版本制作 (转)

    大致流程: 1.安装Qt(源码版)以及其他必要的环境 2.编译/安装 3.配置 4.使用 ----------正文分割线---------- 1.安装Qt(源码版) 1.1 下载Qt(两个地址二选一即 ...

  9. qt学习教程1.qt开发环境搭建

    qt学习教程1.qt开发环境搭建 首先下载qt 下载地址:http://download.qt.io/archive/qt/ 此教程使用的版本为5.1.1 下载好后,打开安装包,然后点下一步 选择一个 ...

随机推荐

  1. asf

    这些日子我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望能  够为国内IT的发展尽自己一份微薄的力量.最近看到很多学生朋友和我当年一样没有方向  ,所以把我的经历写出来与大家共勉, ...

  2. 剑指offer——01二维数组中的查找(Python3)

    题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...

  3. <Android Framework 之路>Android5.1 Camera Framework(四)——框架总结

    前言 从之前的几篇文件,可以基本弄清楚 Camera从APK,经过framework的衔接,与HAL层进行交互,最终通过驱动完成Camera的一些动作. Camera层次分析 APP层 Framewo ...

  4. Hibernate配置文件 hibernate.cfg.xml

    <!--标准的XML文件的起始行,version='1.0'表明XML的版本,encoding='gb2312'表明XML文件的编码方式--> <?xml version='1.0' ...

  5. UVa 11729 Commando War 【贪心】

    题意:有n个部下,交待每个部下完成他相应的任务需要bi的时间,然后完成这项任务需要ji的时间, 选择交待任务的顺序,使得总的花费的时间最少 因为不管怎么样,交待所需要的n*bi的时间都是要花费的, 然 ...

  6. ZBrush中的实时遮罩

    在ZBrush®中有许多遮罩类型,包括柔滑遮罩.反转遮罩,实时遮罩等.其中,实时遮罩又包含很多种类,它不同于一般的遮罩是不显示的,实时遮罩是根据实时信息产生新的遮罩. 在“Brush”菜单下“Auto ...

  7. Shell(一)变量

    一.简介 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个界面,用 ...

  8. c 最简单的链表

    #include <stdio.h> struct node { int data; struct node *next; //指向本身的指针 }; // main() { struct ...

  9. 论文阅读《ActiveStereoNet:End-to-End Self-Supervised Learning for Active Stereo Systems》

    本文出自谷歌与普林斯顿大学研究人员之手并发表于计算机视觉顶会ECCV2018.本文首次提出了应用于主动双目立体视觉的深度学习解决方案,并引入了一种新的重构误差,采用自监督的方法来解决缺少ground ...

  10. SVN提交代码时报405 Method Not Allowed

    原因: 1.删除了某个文件夹,然后又创建了一个同名文件夹 2.之前执行过Add操作,但没上传代码,在电脑上提交了同路径的代码,再次上传时会报错 解决方法: 1. 删除出现错误的文件夹 2. SVN U ...