Qt Quick Controls 与 Qt Quick Controls 2的区别(详细对照)
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的区别(详细对照)的更多相关文章
- 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 ...
- Qt开发技术:Qt拽拖开发(一)拽托框架详解及Demo
前话 Qt中的拽拖操作详细介绍. Demo 图片拽拖 控件拽拖 窗口拽拖 拽托框架(高级开发) 拖放(Drag and Drop) 拖放提供了一种简单的可视 ...
- QT征程之初识qt
下载 https://www.qt.io/cn/download-open-source/ 下载QT离线安装包 Qt 5.5.1 for Linux 32-bit (546 MB) (info ...
- Qt环境搭建(Qt Creator)
简述 上一节中介绍了如何进行Qt和Visual Studio的下载安装,随后演示了如何将Qt集成到Visual Studio中,并完成了我们第一个Qt小程序-Hello World.下面主要讲解如何利 ...
- QT核心编程之Qt线程 (c)
QT核心编程之Qt线程是本节要介绍的内容,QT核心编程我们要分几个部分来介绍,想参考更多内容,请看末尾的编辑推荐进行详细阅读,先来看本篇内容. Qt对线程提供了支持,它引入了一些基本与平台无关的线程类 ...
- QT-【转】Qt 4迁移至Qt 5
将Qt 4代码迁移到Qt 5还是比较简单的.实际上,在Qt 5开发过程中就已经注意了与Qt 4代码保持兼容性. 与Qt 3到Qt 4的迁移不同,Qt 5的核心类库并没有做大的API的修改,只有几个新的 ...
- Qt4.7文档翻译:Qt样式单参考,Qt Style Sheets Reference(超长,超全)
内容目录 Qt样式单参考 可进行样式设置的部件列表 属性列表 图标列表 属性类型列表 伪状态列表 子控件列表 Qt样式单参考 Qt样式单支持各种属性.伪状态和子控件,这样使得妳能够自行设计部件的外观. ...
- Qt for Windows:Qt 5.4.0 MinGW 静态编译版本制作 (转)
大致流程: 1.安装Qt(源码版)以及其他必要的环境 2.编译/安装 3.配置 4.使用 ----------正文分割线---------- 1.安装Qt(源码版) 1.1 下载Qt(两个地址二选一即 ...
- qt学习教程1.qt开发环境搭建
qt学习教程1.qt开发环境搭建 首先下载qt 下载地址:http://download.qt.io/archive/qt/ 此教程使用的版本为5.1.1 下载好后,打开安装包,然后点下一步 选择一个 ...
随机推荐
- Android自己定义控件皮肤
Android自己定义控件皮肤 对于Android的自带控件,其外观仅仅能说中规中矩,而我们平时所示Android应用中,一个简单的button都做得十分美观.甚至于很多button在按下时的外观都有 ...
- 百度编辑器图片在线流量返回url改动
百度编辑器中返回的是我们server中的url,有时并非我们须要的,比方图文编辑中.我想在线浏览上传过的图片 ,那么我返回的应该是腾讯server上面的url.这样才不会被腾讯的过滤器过来掉,全部我们 ...
- tensorflow利用预训练模型进行目标检测(三):将检测结果存入mysql数据库
mysql版本:5.7 : 数据库:rdshare:表captain_america3_sd用来记录某帧是否被检测.表captain_america3_d用来记录检测到的数据. python模块,包部 ...
- hdoj--1166--敌兵布阵(线段树)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- linux系统oracle服务自启动
终于知道为什么自启动脚本一直无法成功执行,原来都是空格不对惹的祸.具体步骤说明如下: 1.修改dbstart和dbshut脚本 dbstart脚本默认值启动oracle服务,不启动监听服务,如果想在启 ...
- Spring《二》 Bean的生命周期
Bean初始化 1.bean中实现public void init():方法,config.xml中增加init-method="init" 属性. 2.bean实现接口Initi ...
- centos 部署 .net core runtime 环境
除非在linux下开发才安装SDK,一般生产环境只需安装 runtime 1.添加 yum 源 sudo rpm --import https://packages.microsoft.com/key ...
- Js基础知识(作用域、特殊函数---自调、回调、作为值的函数)
15.作用域 概念: 规定变量或函数的可被访问的范围和生命周期 分类: 全局作用域 -就是指当前整个页面环境: 局部作用域(函数作用域) -就是指某个函数内部环境 l 变量的作用域 全局变量 - 定义 ...
- c++标准库都有哪些文件
from:http://topic.csdn.net/u/20090201/16/3bd41b72-5694-474e-a68b-98b2f070e76b.html C++标准库的所有头文件都没有扩展 ...
- win7(32位)旗舰版共享HP1010打印机给WINXP专业版
一.状况: 两台电脑,同一网段内,电脑A是WIN7系统(32位),电脑B是WINXP系统. ①电脑A(win7)已经安装完打印机驱动,能正常打印,对该打印机HP1010共享时,提示“无法保存打印机设置 ...