KDevelop 5.4.3 发布了,这是一个 bug 修复版本。主要更新内容如下:

以下内容为本人的学习笔记,如需要转载,请声明原文链接 [englyf]

QML学习心得,qml学习

Qt Quick之于QML,正如Qt 之于 C++,QML是Qt中开发的一个新的语言,而Qt
Quick是这个语言的一个组件库,其中包含了很多用QML写的可以现成使用的组件。

QML Hello World

// 导入语句部分
import QtQuick 2.4
import QtQuick.Window 2.2
//对象声明部分
Window {
   visible: true
    MainForm {
       anchors.fill: parent
       mouseArea.onClicked: {
            Qt.quit();
       }
   }
}

   
正如这段代码所示的,一个QML文档定义了一个QML对象树,由两部分组成:一个import导入部分,一个对象声明部分。

   
import导入语句类似于C++中的#include,只有导入了相关模块,才能使用其中的类型和功能。这里导入了QtQuick模块,这个就是我们前面创建项目时选择的组件集,它包含了创建用户界面所需要的基本类型和功能;而QtQuick.Window模块中提供了Window类型,它可以为Qt
Quick场景创建一个顶层窗口。

   
在Window中的visible是Window的属性,用来设置窗口是否显示,可以在帮助文档中查看一个类型的所有属性及用法。

Qt Quick之于QML,正如Qt 之于
C++,QML是Qt中开发的一个新的语言,而Qt
Quick是这个语言的一个组件库,其中包含了很多用…

kdevelop

  • ProblemNavigationContext:修复带有声明的 file:line
    链接的错误链接目标
    (commit)
  • 澳门新葡萄京所有网站,ProjectManagerView:使带有空图标的项目与带有有效图标的项目具有相同的缩进
    (commit)
  • 欢迎页面:修复 QtQuick.XmlListModel 导入的版本以匹配 Qt 5.7 ff
    (commit)
  • 欢迎页面:修复 QtQuick.Layouts 导入的版本以匹配 Qt 5.7 ff
    (commit)
  • [Grepview] 使用正确的回退图标折叠全部
    (commit)
  • FileManagerListJob:使用 semaphore 进行锁定
    (commit)
  • 修复 DUChain 中的无限递归
    (commit)
  • 缓存每种语言类型的类似于 gcc 的编译器的定义/包含
    (commit)
  • 仅在需要时才写入定义文件
    (commit)
  • 不要在完全匿名的结构上设置超长名称
    (commit)
  • 使用类型名称作为匿名类型定义的结构/联合的回退 ID
    (commit. fixes
    bug #409041)
  • 修复了过滤类列表时崩溃的问题
    (commit. code
    review D22660. fixes
    bug #406931)
  • Gcclikecompiler:正确解析包含符号链接的路径
    (commit. fixes
    bug #405221)

创建一个 QML 文件

QML 文档内部定义了高可读和结构化的对象层次系统。 每个 QML
文档都由两部分组成:导入部分和对象声明部分。通过导入
QtQuick,可以使用到用户界面开发过程中最常用的类型和功能。

kdev-php

  • 使用数组常量修复表达式
    (commit. fixes
    bug #405719)
  • 不要将类常量标记为 normal
    members (commit)

更新说明:

(文/开源中国)    

导入和使用 QtQuick 模块

QML 文档在使用 Qt Quick 前必须要先导入它。导入的语法看下面:

import QtQuick 2.3

从这里开始,由 Qt Quick 提供的类型和功能都可以在 QML 文档里直接引用了。

定义一个对象层次结构系统

在 QML 文档中声明的对象定义了会被显示到可视场景的内容。Qt Quick
为所有的用户界面提供了基础的构建模块,比如显示图片、文字和处理用户输入的对象,就像盖房子必须要用到的砖头、柱子等等。下面演示一个简单的对象声明,显示出来就是:由绿色的矩形包含着一些字符串在中间,非常经典的问候「Hello,
World!」

Rectangle { width: 300 height: 200 color: "green" Text { anchors.centerIn: parent text: "Hello, World!" }}

上面的代码中定义了一组对象层次结构,有一个根对象 Rectangle
和里面的一个子对象 Text。对象 Text 的父母会被自动设置成根对象
Rectangle,很明显,对象 Text 会被 QML 添加到对象 Rectangle 的属性
children 中。

完整的一个 QML 文档

上面用到的 Rectangle 和 Text 都是要由 QtQuick
导入才能使用。像下面这样才可以成为一个完整的 QML 文档:

import QtQuick 2.3Rectangle { width: 300 height: 200 color: "green" Text { anchors.centerIn: parent text: "Hello, World!" }}

然后保存这个文档为「HelloWorld.qml」,稍后我们就可以加载和显示它了。

创建 QML 工程,然后跑起来!

可以使用 Qt Creator 加载显示 QML
文档定义的图形场景。对于像上面定义的这种简单 UI 文件,可以在 Qt Creator
中选择 File > New File or Project > Applications > Qt Quick
UI得到。点击绿色高亮的按钮 Run 运行应用。你会看到字符串「Hello,
World!」显示在绿色的矩形中间。如果你想知道更多关于在 Qt Creator
中创建和运行工程的信息,下面的链接里有你需要的:

  • 怎么创建 Qt Quick 工程 ?
  • Building and Running an Example

使用控件创建 QML 应用

虽然 Qt Quick 为我们提供了基础的图形元素,但是也可以在应用中使用 Qt
Quick Controls 提供的现成 QML
控件类型,这样更快捷更方便,大大加速开发过程。为了快速构建一个 QML
可视化应用,可以插入一个 ApplicationWindow 类型。一个 QML
界面有以下图所示的布局:

澳门新葡萄京所有网站 1为了搭建一个应用,可以在上图所示的各个区域中添加和连接不同的控件。下面就利用上面的搭建的布局写一个基本的应用:

// 导入相关的模块import QtQuick 2.3import QtQuick.Controls 1.2import QtQuick.Window 2.2//包含应用的窗口ApplicationWindow { //title of the application title: qsTr("Hello World") width: 640 height: 480 //包含两个菜单项的菜单 menuBar: MenuBar { Menu { title: qsTr MenuItem { text: qsTr("&O打开") onTriggered: console.log; } MenuItem { text: qsTr onTriggered: Qt.quit(); } } } //Content Area //按钮,在 Content Area 的中间 Button { text: qsTr("Hello World") anchors.horizontalCenter: parent.horizontalCenter anchors.verticalCenter: parent.verticalCenter }}

点击 Run
运行工程可以看到有两个菜单和一个在中间的按钮。点击「退出」菜单可以关闭应用,如下图所示

澳门新葡萄京所有网站 2

当然,也有一些不同的导航方法和控件,例如按键和滑块可供使用。下面的两个例子可以从
Qt Creator 获得,里面演示了使用更多的控件和布局,有兴趣的可以看看:

  • Basic Layouts
  • Touch Gallery你可以将上面链接里提到的代码片段复制并粘贴到 hello
    world 的例子中,看看 QML 的怎么使用。

处理用户的输入

使用 QML
来定义用户界面的其中一个巨大的优势就是,允许界面设计者使用简单的
JavaScript 表达式来定义应用如何处理事件。在 QML 里,我们把事件叫做
信号,而且这些信号由 信号处理程序 处理。

Rectangle { width: 200 height: 100 color: "red" Text { anchors.centerIn: parent text: "Hello, World!" } MouseArea { anchors.fill: parent onClicked: parent.color = "blue" }}

把上面这段代码保存到文件「ClickableHelloWorld.qml」中,然后点击 Run 运行
qmlscene,界面会运行起来。当点击窗口的任何地方,矩形会从红色变成蓝色。因为
MouseArea 对触摸事件也会发送 clicked
信号,所以上面这段功能对移动设备也有效。对于键盘输入,我们也可以用一段简单的表达式来处理:

Rectangle { width: 200 height: 100 color: "red" Text { anchors.centerIn: parent text: "Hello, World!" } focus: true Keys.onPressed: { if (event.key == Qt.Key_Return) { color = "blue"; event.accepted = true; } }}

关于上面这段代码,可以看到接收到焦点后,当 return
键被按下时,窗口的颜色也会改变。

属性绑定

对象和它们的属性是 QML 文档中定义的图形界面的组成基础。QML
语言允许以各种方式让属性相互关联,实现了高度动态的用户界面。下面的例子中,各个子矩形的几何大小都被关联到了父矩形的几何大小。由于属性的绑定关系,所以当父矩形的几何大小改变之后,各个子矩形的几何大小也会自动被更新。

Rectangle { width: 450 height: 200 Rectangle { width: parent.width / 2 height: parent.height } Rectangle { width: parent.width / 2 height: parent.height x: parent.width / 2 }}

动画

属性也可以通过动画来动态更新。可以使用 QtQuick
提供的各种动画类型来动态改变属性的值。在下面的例子中,一个属性被设置了动画,并且将显示在文本区域:

Rectangle { color: "lightgray" width: 200 height: 200 property int animatedValue: 0 SequentialAnimation on animatedValue { loops: Animation.Infinite PropertyAnimation { to: 150; duration: 1000 } PropertyAnimation { to: 0; duration: 1000 } } Text { anchors.centerIn: parent text: parent.animatedValue }}

运行工程后可以看到,显示的数值会定期循环从0到150,再从150到0地变化。

自定义可重用的 QML 类型

其实 QML
最重要的概念就是类型可重用。一个应用可能包含了多个类似的可视化类型,例如多个按钮等,所以
QML
为了最小化代码拷贝和最大化代码可读性,允许对这些类型进行可重用的定制化。下面看看例子,假如我们定义了一个新的
Button 类型,并且保存为文件 Button.qml:

// Button.qmlimport QtQuick 2.3Rectangle { width: 100; height: 100 color: "red" MouseArea { anchors.fill: parent onClicked: console.log("Button clicked!") }}

现在上面定义了的 Button 类型就可以多次重复使用了,看一下示例:

// application.qmlimport QtQuick 2.3Column { Button { width: 50; height: 50 } Button { x: 50; width: 100; height: 50; color: "blue" } Button { width: 50; height: 50; radius: 8 }}

澳门新葡萄京所有网站 3

通过上面的示例,可以看到在应用程序中可以组装和重复调用自定义的类型。这里要注意一下,上面并没有看到显式的导入
Button 类型,因为只要调用和定义在同一路径下就不需要显式的导入。

关于怎么编写自己的可重用组件还有很多的细节和要注意的地方,更多的内容请点击这里
QML 对象的属性。

接下来可以做什么

看完上面的内容,相信已经对 QML
有一定的印象了,但了解得还是很浅,怎么能就这样止步不前?所以请继续大踏步向前吧:

  • QML 应用开发介绍
  • Qt Examples and Tutorials

参考英文资料[Qt]