Qt Quick Controls
自 QML 第一次发布已经过去一年多的时间,但在企业应用领域,QML 一直没有能够占据一定地位。很大一部分原因是,QML 缺少一些在企业应用中亟需的组件,比如按钮、菜单等。虽然移动领域,这些组件已经变得可有可无,但在桌面系统中依然不可或缺。为了解决这一问题,Qt 5.1 发布了 Qt Quick 的一个全新模块:Qt Quick Controls。顾名思义,这个模块提供了大量类似 Qt Widgets 模块那样可重用的组件。本章我们将介绍 Qt Quick Controls,你会发现这个模块与 Qt 组件非常类似。
为了开发基于 Qt Quick Controls 的程序,我们需要创建一个 Qt Quick Application 类型的应用程序,选择组件集的时候注意选择 Qt Quick Controls 即可:
注意,Qt Creator 给出的是 Qt Quick Controls 1.0,而最新版本的 Qt 5.2 搭载的 Qt Quick Controls 是 1.1。1.1 比 1.0 新增加了一些组件,比如BusyIndicator
等。所以,如果你发现某个组件找不到,记得更新下 Qt Quick Controls 的版本。
Qt Quick Controls 1.1 提供了多种组件:
应用程序窗口,用于描述应用程序基本窗口的组件属性
ApplicationWindow |
对应QMainWindow ,提供顶层应用程序窗口
|
MenuBar |
对应QMenuBar ,提供窗口顶部横向的菜单栏
|
StatusBar |
对应QStatusBar ,提供状态栏
|
ToolBar |
对应QToolBar ,提供工具栏,可以添加ToolButton 和其它组件
|
Action |
对应QAction ,提供能够绑定到导航和视图的抽象的用户界面动作
|
ScrollView |
对应QScrollView ,提供滚动视图
|
SplitView |
对应QSplitter ,提供可拖动的分割视图布局
|
StackView |
对应QStackedWidget ,提供基于栈的层叠布局
|
TabView |
对应QTabWidget ,提供带有标签的基于栈的层叠布局
|
TableView |
对应QTableWidget ,提供带有滚动条、样式和表头的表格
|
BusyIndicator | 提供忙等示意组件 | |
Button |
对应QPushButton ,提供按钮组件
|
|
CheckBox |
对应QCheckBox ,提供复选框
|
|
ComboBox |
对应QComboBox ,提供下拉框
|
|
GroupBox |
对应QGroupBox ,提供带有标题、边框的容器
|
|
Label |
对应QLabel ,提供标签组件
|
|
ProgressBar |
对应QProgressBar ,提供进度条组件
|
|
RadioButton |
对应QRadioButton ,提供单选按钮
|
|
Slider |
对应QSlider ,提供滑动组件
|
|
SpinBox |
对应QSpinBox ,提供微调组件
|
|
Switch | 提供类似单选按钮的开关组件 | |
TextArea |
对应QTextEdit ,提供能够显示多行文本的富文本编辑框
|
|
TextField |
对应QTextLine ,提供显示单行文本的纯文本编辑框
|
|
ToolButton |
|
|
ExclusiveGroup | 提供互斥 |
Menu |
对应QMenu ,提供菜单、子菜单、弹出菜单等
|
MenuSeparator | 提供菜单分隔符 |
MenuItem | 提供添加到菜单栏或菜单的菜单项 |
StatusBar |
对应QStatusBar ,提供状态栏
|
ToolBar |
对应QToolBar ,提供工具栏,可以添加ToolButton 和其它组件
|
整个程序都是在 IDE 帮我们生成的 main.qml 中实现的。首先我们需要添加import
语句:
import QtQuick 2.1
import QtQuick.Controls 1.1
注意我们修改了 IDE 生成的默认语句。整个 QML 文档的根元素是ApplicationWindow
:
ApplicationWindow {title: qsTr("Simple Editor")width: 640height: 480...
}
ApplicationWindow
是应用程序的主窗口,类似QMainWindow
,提供了很多预定义的功能,比如菜单、工具栏等。代码里面的qsTr()
函数类似tr()
函数,用于以后的国际化。所有面向用户的文本都应该使用这个函数。
下面向ApplicationWindow
中添加控件:
menuBar: MenuBar {Menu {title: qsTr("&File")MenuItem { action: newAction }MenuItem { action: exitAction }}Menu {title: qsTr("&Edit")MenuItem { action: cutAction }MenuItem { action: copyAction }MenuItem { action: pasteAction }MenuSeparator {}MenuItem { action: selectAllAction }}
}toolBar: ToolBar {Row {anchors.fill: parentToolButton { action: newAction }ToolButton { action: cutAction }ToolButton { action: copyAction }ToolButton { action: pasteAction }}
}TextArea {id: textAreaanchors.fill: parent
}
首先看最后面的TextArea
,这是整个窗口的主要控件,类似于setCentralWidget()
函数调用。
menuBar
和toolBar
两个属性都是ApplicationWindow
提供的属性。
menuBar
是MenuBar
类型的,所以我们创建一个新的MenuBar
控件。MenuBar
具有层次结构,这是通过Menu
的嵌套实现的。每一个菜单项都是用MenuItem
实现的;菜单项之间的分隔符则使用MenuSeparator
控件。这点与 QtWidgets 有所不同。
toolBar
是Item
类型的,不过通常都会使用ToolBar
控件。ToolBar
默认没有提供布局,因此我们必须给它设置一个布局。这里我们直接添加了一个Row
,作为横向工具栏的布局。这个工具栏要横向充满父窗口,因此设置锚点为anchors.fill: parent
。虽然我们设置的是充满整个父窗口,但是工具栏的行为是,如果其中只有一个子元素(比如这里的Row
),那么工具栏的高度将被设置为这个子元素的implicitHeight
属性。这对结合布局使用非常有用。事实上,这也是工具栏最常用的方法。工具栏中添加了四个按钮,都是ToolButton
类型。
每一个MenuItem
和ToolButton
都添加了一个action
属性。下面是这部分代码:
Action {id: exitActiontext: qsTr("E&xit")onTriggered: Qt.quit()}Action {id: newActiontext: qsTr("New")iconSource: "images/new.png"//默认可执行文件的同级莫目录onTriggered: {textArea.text = "";}}Action {id: cutActiontext: qsTr("Cut")iconSource: "images/cut.png"onTriggered: textArea.cut()//信号处理函数}Action {id: copyActiontext: qsTr("Copy")iconSource: "images/copy.png"onTriggered: textArea.copy()}Action {id: pasteActiontext: qsTr("Paste")iconSource: "images/paste.png"onTriggered: textArea.paste()}Action {id: selectAllActiontext: qsTr("Select All")onTriggered: textArea.selectAll()}
Action
类似QAction
。这里我们还是使用qsTr()
函数设置其显示的文本。
使用iconSource
属性可以指定图标。注意这里的图标只能是位于文件系统中的,不能加载资源文件中的图标(当然,这并不是绝对的。如果我们将整个 QML 文档放在资源文件中,那么就可以直接加载资源文件中的图标。我们会在后面的章节详细介绍这种技术。)。当我们直接类似“images/new.png”这种路径时,注意 QML 是运行时解释的,因此这个路径是相对与 QML 文件的路径。所以这里的图标需要放在与 main.qml 文件同目录下的 images 目录中。
onTriggered
属性是一种信号处理函数,后面可以添加 JavaScript 语句。如果是多条语句,可以使用大括号,例如newAction
的onTriggered
。QML 组件可以发出信号。与 C++ 不同的是,QML 组件的信号并不需要特别的连接语句,而是使用”on信号名字”的形式。比如,Action
有一个名为triggered
的信号,则其信号处理函数即为onTriggered
。事实上,这是最简单的一种信号槽的实现。不过,这种实现的困难在于,同一个信号只能有一个固定名字的信号处理函数。不过,我们也可以使用 connect 连接语句。后面的章节中将详细介绍这一点。
至此,我们的编辑器便实现了。由于全部使用了TextArea
提供的功能,所以代码很简单。不过,复杂的程序都是这些简单的元素堆积而成,所以,我们现在只是简单介绍,具体的控件使用还要根据文档仔细研究。
源代码路径,点击这里
Qt Quick Controls相关推荐
- 10.QML Qt Quick Controls 2之imagine style
Qt Quick Controls 2的目标之一是将控件的逻辑与外观分离.外观的实现由QML代码和图形资源组成.使用Imagine样式(imagine style),可以自定义应用程序的外观和图形资源 ...
- 7.QML Qt Quick——基于Qt Quick Controls 2实现图片浏览器
Qt Quick Controls 2提供了一组UI控件,例如按钮,标签,复选框,滑块等(用之查之即可).用于在Qt Quick中创建用户界面.UI控件很多,这里通过一个图片浏览器的实现来逐步讲解 图 ...
- qml自定义switch_QML官方系列教程——Qt Quick Controls Styles
附网址:http://qt-project.org/doc/qt-5/qtquickcontrolsstyles-index.html Qt Quick Controls Styles -- Qt Q ...
- Qt文档阅读笔记-Qt Quick Controls - Wearable Demo实例解析
程序运行截图如下: 这个实例主要是用qml玩界面. main.qml文件以及wearable.qml分别是由ApplicationWindow和StatckView.这个StackView用于做导航相 ...
- qml 时间控件_Qt6官方最新消息:桌面样式Qt quick Controls 2支持大多控件,委托更少,运行更流畅...
Qt是一个跨平台框架,通常用作图形工具包,它不仅创建CLI应用程序中非常有用.而且它也可以在三种主要的台式机操作系统以及移动操作系统(如Symbian,Nokia Belle,Meego Harmat ...
- 《Qt5 Cadaques》学习笔记(六):QT QUICK Controls 2
6.1 控件简介 从头开始使用 Qt Quick 为您提供了基本的图形和交互元素,您可以从中构建用户界面.使用 Qt Quick Controls 2,您可以从一组稍微结构化的控件开始构建.控件范围从 ...
- Qt Quick Controls 配置文件
Qt Quick Controls 配置文件 Qt Quick Controls支持一个特殊的配置文件 qtquickcontrols2.conf,该文件内置于应用程序的资源中. 配置文件可以指定首选 ...
- Hello Qt(五十一)———Qt Quick Controls
一.Qt Quick Controls基础 QT5.1发布了Qt Quick的一个全新模块:Qt Quick Controls.Qt Quick Controls模块提供了大量类似Qt Widgets ...
- 自定义 Qt Quick Controls
自定义 Qt Quick Controls 使用 Qt Quick 编写界面时,使用 Qt Quick Controls(指Qt Quick Controls 2)模块中提供的大量控件,可以快速开发出 ...
- Qt6官方最新消息:桌面样式Qt quick Controls 2支持大多控件,委托更少,运行更流畅
Qt是一个跨平台框架,通常用作图形工具包,它不仅创建CLI应用程序中非常有用.而且它也可以在三种主要的台式机操作系统以及移动操作系统(如Symbian,Nokia Belle,Meego Harmat ...
最新文章
- socket的阻塞非阻塞方法在缓冲区的差别
- vue修改计算属性的值_八.Vue计算属性
- linux 守护进程_Linux 守护进程
- android WebView的简单使用
- java线程提交_从Java线程到线程池
- linux创建sudo用户_Linux终极指南-创建Sudo用户
- 程序员成长的10个阶段
- Objective-C中变量采用@property的各个属性值的含义
- 删除域中不再存在的主机
- 再次提升“华容道自动求解”程序效率
- Linux系统基本操作(二)—设置本地光盘为yum源
- gtk_widget_add_events为某个构件添加一个事件
- Delphi7中默认没有安装的官方控件
- EXCEL中拟合公式的问题
- Linux脚本定时开关机,2020-09-06shell脚本开机自动启动与定时任务
- Unity 灯光设置——灯光类型
- [2008-12-12]希捷桌面、笔记本硬盘质保期缩短至3年
- OpenCV求(图像)矩阵中最大值,最小值函数minMaxLoc() vs minMaxIdx()
- int / long / long int / long long / long long int
- 一款QQ盗号木马分析
热门文章
- Win 10系统规避驱动数字签名
- Paxos 实现日志复制同步(Basic Paxos)
- Spark、Hadoop大数据平台搭建
- mysql 32位_MySQL8下载 MySQL 8 for windows 32位 v8.0.18 官方免费正式版 下载-脚本之家
- eclipse安装超帅主题----darkest dark
- 服务器cpu天梯图_笔记本CPU排行天梯图2020
- VS2010编程助手
- 优麒麟安装qq (Ubuntu)
- linux一键安装lamp教程,CentOS7下LAMP一键安装包教程
- 等值线/面生成一站式封装