为了开发基于 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 新增加了一些组件,比如等。所以,如果你发现某个组件找不到,记得更新下 Qt Quick Controls 的版本。
Qt Quick Controls 1.1 提供了多种组件:
我们尝试实现一个编辑器。这是一个简单的文本编辑器,具有新建、剪切、复制和粘贴等操作。程序运行出来效果如下:
注意我们修改了 IDE 生成的默认语句。整个 QML 文档的根元素是ApplicationWindow
:
ApplicationWindow
是应用程序的主窗口,类似QMainWindow
,提供了很多预定义的功能,比如菜单、工具栏等。代码里面的qsTr()
函数类似tr()
函数,用于以后的国际化。所有面向用户的文本都应该使用这个函数。
下面向ApplicationWindow
中添加控件:
首先看最后面的TextArea
,这是整个窗口的主要控件,类似于setCentralWidget()
函数调用。
menuBar
和toolBar
两个属性都是ApplicationWindow
提供的属性。
menuBar
是MenuBar
类型的,所以我们创建一个新的MenuBar
控件。MenuBar
具有层次结构,这是通过Menu
的嵌套实现的。每一个菜单项都是用MenuItem
实现的;菜单项之间的分隔符则使用控件。这点与 QtWidgets 有所不同。
每一个MenuItem
和ToolButton
都添加了一个action
属性。下面是这部分代码:
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 连接语句。后面的章节中将详细介绍这一点。
至此,我们的编辑器便实现了。由于全部使用了提供的功能,所以代码很简单。不过,复杂的程序都是这些简单的元素堆积而成,所以,我们现在只是简单介绍,具体的控件使用还要根据文档仔细研究。
附件: