混合使用

直接在代码中同时调用QtQuick.Controls 2模块和QtQuick.Controls 模块会出错,因为只能识别到一个版本的控件,会出现无法识别QtQuick.Controls 2的属性或QtQuick.Controls中的style的错误,解决方法:

1.对其中一个进行使用到模块进行类型重命名,然后再调用其中的控件,

如:import QtQuick.Controls.Styles 1.2 as Styles12

然后 Controls12.Button{.....     来使用其button

2.将控件封装成组件再调用。

参考:https://blog.csdn.net/zbw1185/article/details/81058486

参考样式

QtQuick.Control模块主要使用style的方式设置样式,QtQuick.Controls 2模块的control则是包含可以被替代的item delegates,类似于组装。

其中 QtQuick.Controls 2 模块的样式可以在帮助里查看:Customizing Qt Quick Controls 2

QtQuick.Control模块的样式可以在帮助里查看 Qt Quick Controls Styles 和 Customizing Qt Labs Controls

使用的是Qt5.6和5.9。

以下是官方文档详细的介绍:

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.ScrollBarAlwaysOffFlickable {// ...}
}

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

Flickable {// ...ScrollBar.vertical: ScrollBar { }
}

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

  Qt Quick Controls Qt Quick Controls 2
Stylable delegates Yes Yes
Pre-built native styles Yes No
Runtime style/theme changes Yes  Yes 
Can be used on Desktop Yes Yes
Can be used on Mobile Yes  Yes
Can be used on Embedded Yes  Yes
Internal event handling 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 {// ...}}
}

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

Button {contentItem: Label {// ...}
}

准备迁移

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

import "controls" as ControlsControls.Button {...
}

类型对照表

第一列列出了在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://doc.qt.io/qt-5/qtquickcontrols2-differences.html

https://blog.csdn.net/qq_32250025/article/details/79913426

QtQuick.Controls 2与 QtQuick.Controls的区别和使用相关推荐

  1. QML之在QtQuick.Controls 2项目中使用QtQuick.Controls模块中的控件

    区别 下面的笔记中将QtQuick.Controls 2简称为qml2,QtQuick.Controls简称为qml1. 最直观的的区别就是qml2的控件及界面风格更加美观,qml2提供了一套谷歌风格 ...

  2. QtQuick controls和controls2 自定义样式

    2019独角兽企业重金招聘Python工程师标准>>> controls import QtQuick 2.7 import QtQuick.Controls 1.4 import ...

  3. QML 自定义控件Button,采用QtQuick.Controls 1.0和2.0两版本实现

    在开发QtQuick项目时,对于界面上的控件Controls往往会重复使用,单个界面上会有多个同样的Controls.在调用系统Controls库时,往往一些属性,如字体.样式.大小等需要多次去编写, ...

  4. QML QtQuick.Controls 2 ScrollBar滚动条样式自定义

    测试版本:Qt5.12及Qt5.15 ,参考Qt源码及文档示例 代码链接:https://github.com/gongjianbo/QmlComponentStyle.git 自定义样式与默认样式的 ...

  5. Qt 5.12--Qt Quick(Controls )

    Qt 5.12--Qt Quick(Controls ) 1 简介 2 版本号 3 引用 4 语法 4.1 子模块 4.2 基本类型 参考 1 简介 Qt Quick模块是用于编写QML应用程序的标准 ...

  6. QtQuick 技巧

    QtQuick 技巧 dpi property real dpi: Screen.pixelDensity.toFixed(2) 常用的 qmlproject /* File generated by ...

  7. 10.QML Qt Quick Controls 2之imagine style

    Qt Quick Controls 2的目标之一是将控件的逻辑与外观分离.外观的实现由QML代码和图形资源组成.使用Imagine样式(imagine style),可以自定义应用程序的外观和图形资源 ...

  8. 9.QML Qt Quick Controls 2中常用的界面形式——并排式界面(SwipeView)

    并排式界面的实现的核心组件就是SwipeView.SwipeView由一组页面填充.一次只能看到一页.用户可以横向滑动浏览页面. 请注意,SwipeView本身完全不可见.一般与PageIndicat ...

  9. 8.QML Qt Quick Controls 2中常用的界面形式——堆叠式界面(StackView)

    堆叠式界面的实现的核心组件就是StackView.StackView是一个基于栈的导航浏览模型,可以与一组关联的页面一起使用.当用户浏览深层页面时,深层页面被推到栈顶,当用户选择返回时,之前浏览的页面 ...

最新文章

  1. 语言 上课点名 缺勤_主播日记5 | “云端”传递的C语言程序设计实验课
  2. [小才能]防备误删文件
  3. 【Hibernate】hibernate实体关系映射——单边的多对多关系
  4. 【英语学习】【English L06】U05 Appointments L6 The experience of booking or canceling
  5. 机器学习实战——AdaBoost
  6. 如何使用四个语句来提高 SQL Server 的伸缩性
  7. matlab 传函将s换为jw,已知单位负反馈系统开环传递函数为20 s(0.5s 1),
  8. 数模(一)TSP问题
  9. 浅谈大数据广告下个人隐私保护,开发者视角的广告原理
  10. STM32单片机GPIO口简介
  11. windows无法连接到某个wifi_Windows无法连接到网络解决方法
  12. struts2 超链接a标签执行action
  13. simulink仿真之比较产生阶梯波
  14. C语言之负数的左移/右移运算
  15. objectArx ---基础操作
  16. 花千骨服务器无响应,花千骨出现游戏闪退 解决闪退方案
  17. 啊 啊 啊 摆弄了半天 dreamweaver cs4终于弄成正版的啦
  18. php adb手机型号,使用adb命令操控Android手机
  19. excel 撤销工作表保护
  20. leetcode374

热门文章

  1. 数据链路层:封装成帧、透明传输、差错检测
  2. 使用容器编译Linux内核并启动运行-续
  3. 浅谈axios的拦截器
  4. 生产过程精确控制系统
  5. html超出部分显示隐藏,CSS文字超出部分隐藏并显示省略号
  6. JavaScript实现返回顶部按钮
  7. 使用U盘安装统信UOS20服务器操作系统1050a出现“设置基础软件仓库时出错”报错导致无法继续安装的解决方法
  8. SELinux的学习
  9. 利用Python入门编程
  10. Python爬虫之煎蛋网妹子图爬虫,解密图片链接加密方式