- 浏览: 2291226 次
- 性别:
- 来自: 深圳
-
文章分类
最新评论
-
wahahachuang5:
web实时推送技术使用越来越广泛,但是自己开发又太麻烦了,我觉 ...
细说websocket - php篇 -
wahahachuang8:
挺好的,学习了
细说websocket - php篇 -
jacking124:
学习了!支持你,继续
初窥Linux 之 我最常用的20条命令 -
aliahhqcheng:
应该是可以实现的,没有看过源码。你可以参考下:http://w ...
Jackson 框架,轻易转换JSON
Qt Quick 布局介绍
在 Qt Widgets 中,我们经常使用布局管理器来管理界面上的众多 widgets 。在 Qt Quick 中其实有两套与布局管理相关的类库,一套叫作 Item Positioner ,一套叫作 Item Layout 。 Item Layout 包括 RowLayout 、 ColumnLayout 、 GridLayout,与 Qt Widgets 中的布局管理器更相近,不过这里不打算介绍它们,本文的重点是 Item Positioner 。 Qt Quick 提供这么几种常用的 Positioners :
- anchors ,锚布局
- Row ,行布局
- Column ,列布局
- Grid ,表格布局
- Flow ,流式布局
咱们一个一个来看。
请给我的决赛文章《Qt Quick 图像处理实例之美图秀秀(附源码下载)》投票,谢谢。
版权所有 foruok ,转载请注明出处:http://blog.csdn.net/foruok。
anchors(锚)布局
在《Qt on Android: Qt Quick 简单教程》一文中我们已经介绍过锚布局了。为了自成篇幅,这里再重复一下,不过示例会更新哦。
anchors 提供了一种方式,让你可以通过指定一个元素与其它元素的关系来确定元素在界面中的位置。
你可以想象一下,每个 item 都有 7 条不可见的锚线:左(left)、水平中心(horizontalCenter)、上(top)、下(bottom)、右(right)、垂直中心(verticalCenter)、基线(baseline)。看图 1 就明白了:
图 1 锚线
在图 1 中,没有标注基线,基线是用于定位文本的,你可以想象一行文字端坐基线的情景。对于没有文本的图元,baseline 和 top 一致。
使用 anchors 布局时,除了对齐锚线,还可以在指定上(topMargin)、下(bottomMargin)、左(leftMargin)、右(rightMargin)四个边的留白。看图 2 就明白了:
图 2 留白
除了图 1 和图 2 介绍的属性, anchors 还有一些属性,centerIn 表示将一个 item 居中放置到另一个 item 内, fill 表示充满某个 item ……更多请参考 Item 类的文档。
好了,基础知识介绍完毕,看一个大而全的例子,文件名是 anchors_layout.qml ,内容如下:
import QtQuick 2.0 import QtQuick.Controls 1.1 Rectangle { width: 360; height: 240; color: "#EEEEEE"; id: rootItem; Text { id: centerText; text: "A Single Text."; anchors.centerIn: parent; font.pixelSize: 24; font.bold: true; } function setTextColor(clr){ centerText.color = clr; } //color pickers look at parent's top ColorPicker { id: topColor1; color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); anchors.left: parent.left; anchors.leftMargin: 4; anchors.top: parent.top; anchors.topMargin: 4; onColorPicked: setTextColor(clr); } ColorPicker { id: topColor2; color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); anchors.left: topColor1.right; anchors.leftMargin: 4; anchors.top: topColor1.top; onColorPicked: setTextColor(clr); } ColorPicker { id: topColor3; color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); anchors.right: parent.right; anchors.rightMargin: 4; anchors.top: parent.top; anchors.topMargin: 4; onColorPicked: setTextColor(clr); } ColorPicker { id: topColor4; color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); anchors.right: topColor3.left; anchors.rightMargin: 4; anchors.top: topColor3.top; onColorPicked: setTextColor(clr); } //color pickers sit on parent's bottom ColorPicker { id: bottomColor1; color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); anchors.left: parent.left; anchors.leftMargin: 4; anchors.bottom: parent.bottom; anchors.bottomMargin: 4; onColorPicked: setTextColor(clr); } ColorPicker { id: bottomColor2; color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); anchors.left: bottomColor1.right; anchors.leftMargin: 4; anchors.bottom: bottomColor1.bottom; onColorPicked: setTextColor(clr); } ColorPicker { id: bottomColor3; color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); anchors.right: parent.right; anchors.rightMargin: 4; anchors.bottom: parent.bottom; anchors.bottomMargin: 4; onColorPicked: setTextColor(clr); } ColorPicker { id: bottomColor4; color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); anchors.right: bottomColor3.left; anchors.rightMargin: 4; anchors.bottom: bottomColor3.bottom; onColorPicked: setTextColor(clr); } //align to parent's left && vertical center ColorPicker { id: leftVCenterColor; color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); anchors.left: parent.left; anchors.leftMargin: 4; anchors.verticalCenter: parent.verticalCenter; onColorPicked: setTextColor(clr); } //align to parent's right && vertical center ColorPicker { id: rightVCenterColor; color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); anchors.right: parent.right; anchors.rightMargin: 4; anchors.verticalCenter: parent.verticalCenter; onColorPicked: setTextColor(clr); } //align to parent's top && horizontal center ColorPicker { id: topHCenterColor; color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); anchors.top: parent.top; anchors.topMargin: 4; anchors.horizontalCenter: parent.horizontalCenter; onColorPicked: setTextColor(clr); } //align to parent's bottom && horizontal center ColorPicker { id: bottomHCenterColor; color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); anchors.bottom: parent.bottom; anchors.bottomMargin: 4; anchors.horizontalCenter: parent.horizontalCenter; onColorPicked: setTextColor(clr); } }
示例代码中用到的 ColorPicker 是我们在《Qt Quick 组件与对象动态创建详解》中自定义的组件,如果忘了请回头看看,要确保 ColorPicker.qml 与 anchors_layout.qml 在一个文件夹内。 ColorPicker 定义了 colorPicked 信号,参数为 clr ,类型是 color 。我在示例代码中为每个 ColorPicker 对象创建了 onColorPicked 信号处理器,调用 setTextColor() 函数改变界面中间的文本的颜色。
Qt 是 QML 提供的一个全局对象,提供了很多有用的方法和枚举值,这里我们使用 rgba() 函数来生成颜色值。 Math 对象是 JavaScript 语言那只对象,它的 random() 方法放回 0 到 1 之间的随机值。
图 3 是执行 qmlscene anchors_layout.qml 后的效果图:图 3 锚布局示例效果
锚布局是最灵活的一种 Qt Quick 布局方式,使用它你可以随意摆布界面上那些可见元素,不过,如果你的界面元素很多,它也将是代码量最大的一种布局方式。
接下来我们看看那些传统的布局方式吧,如果你使用过 Qt Widgets ,相信会很快明白。
行布局
anchors 实际上是 Item 的一个属性集,而 Row 则是一个单独的 Item ,专门用来管理其它 Item 的,后面介绍的几种布局,也是类似的。
Row 沿着一行安置它的孩子们,在你需要水平放置一系列的 Item 时,它比锚布局更加方便。一旦你把一个 Item 交给 Row 来管理,那就不要再使用 Item 的 x 、 y 、 anchors 等属性了, Row 会安排得妥妥的。
在一个 Row 内的 item ,可以使用 Positioner 附加属性来获知自己在 Row 中的更多位置信息。 Positioner 有 index 、 isFirstItem 、 isLastItem 三个属性。
看我们的示例 row_layout.qml :
import QtQuick 2.0 import QtQuick.Controls 1.1 Rectangle { width: 360; height: 240; color: "#EEEEEE"; id: rootItem; Text { id: centerText; text: "A Single Text."; anchors.centerIn: parent; font.pixelSize: 24; font.bold: true; } function setTextColor(clr){ centerText.color = clr; } Row { anchors.left: parent.left; anchors.leftMargin: 4; anchors.bottom: parent.bottom; anchors.bottomMargin: 4; spacing: 4; ColorPicker { color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } ColorPicker { color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } ColorPicker { color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } ColorPicker { color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } } }
执行命令 qmlscene row_layout.qml ,效果如图 4 所示:
图 4 行布局效果图
因为 Row 本身是一个 Item ,所以你可以使用锚布局来定位一个 Row ,示例中这么做了,把 Row 放在界面的左下角。
Row 有一个 spacing 属性,用来指定它管理的 Item 之间的间隔。还有一个layoutDirection 属性,可以指定布局方向,取值为 Qt.LeftToRight 时从左到右放置 Item ,这是默认行为,取值为Qt.RightToLeft 时从右向左放置 Item 。还有其它的一些属性,请参看 Qt SDK 。
列布局
Column 与 Row 类似,不过是在垂直方向上安排它的子 Items 。在你需要垂直放置一系列的 Item 时,它比锚布局更加方便。
Column 本身也是一个 Item ,可以使用 anchors 布局来决定它在父 Item 中的位置。 Column 的 spacing 属性描述子 Item 之间的间隔。
看示例 column_layout.qml :
import QtQuick 2.0 import QtQuick.Controls 1.1 Rectangle { width: 360; height: 240; color: "#EEEEEE"; id: rootItem; Text { id: centerText; text: "A Single Text."; anchors.centerIn: parent; font.pixelSize: 24; font.bold: true; } function setTextColor(clr){ centerText.color = clr; } Column { anchors.left: parent.left; anchors.leftMargin: 4; anchors.bottom: parent.bottom; anchors.bottomMargin: 4; spacing: 4; ColorPicker { color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } ColorPicker { color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } ColorPicker { color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } ColorPicker { color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } } }
代码与 row_layout.qml 类似,不用解释了,图 5 是执行 qmlscene column_layout.qml 后的效果:
图 5 列布局效果图
与 Row 类似, Column 内的子 Item 也可以使用 Positioner 附加属性。
表格布局
Grid 在一个网格上安置它的子 Items ,它会创建一个拥有很多单元格的网格,足够容纳它所有的子 Items 。 Grid 会从左到右、从上到下把它的子 items 一个一个塞到单元格里。 item 默认会被放在一个单元格左上角,(0,0) 位置。
你可以通过 rows 和 columns 属性设定表格的行、列数。如果你不设置,默认只有四列,而行数则会根据实际的 item 数量自动计算。 rowSpacing 和 columnSpacing 指定行、列间距,单位是像素。
Grid 的 flow 属性描述表格的流模式,可以取值 Grid.LeftToRight ,这是默认模式,从左到右一个挨一个放置 item ,一行放满再放下一行;取值为Grid.TopToBottom 时,从上到下一个挨一个放置 item ,一列放满再放下一列。
horizontalItemAlignment 和verticalItemAlignment 指定单元格对齐方式。默认的单元格对齐方式和 layoutDirection 以及 flow 有关。
先看个简单的例子, grid_layout.qml :
import QtQuick 2.0 import QtQuick.Controls 1.1 Rectangle { width: 360; height: 240; color: "#EEEEEE"; id: rootItem; Text { id: centerText; text: "A Single Text."; anchors.centerIn: parent; font.pixelSize: 24; font.bold: true; } function setTextColor(clr){ centerText.color = clr; } Grid { anchors.left: parent.left; anchors.leftMargin: 4; anchors.bottom: parent.bottom; anchors.bottomMargin: 4; rows: 3; columns: 3; rowSpacing: 4; columnSpacing: 4; ColorPicker { color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } ColorPicker { color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } ColorPicker { color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } ColorPicker { color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } ColorPicker { color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } ColorPicker { color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } ColorPicker { color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } } }
为了看出 flow 取值不同时的效果,我特意将行列数都设置为 3 ,创建了 7 个 ColorPicker 实例。图 6 是效果:
图 6 表格布局,从左到右的效果
如果设置 Grid 的 flow 属性为 Grid.TopToBottom (加一行代码 "flow: Grid.TopToBottom;"),可以看到图 7 的效果:
图 7 表格布局,从上到下的效果
调整 Grid 的其它属性会带来什么样的变化呢?请你试试吧。
流布局
Flow 其实和 Grid 类似,不同之处是它没有显式的行、列数,它会计算自身尺寸和子 item 尺寸来根据需要折行。它的 flow 属性,默认取值Flow.LeftToRight,从左到右安排 item ,直到 Flow 本身的宽度被超出时折行;当 flow 取值Flow.TopToBottom 时,从上到下安排 item ,直到 Flow 本身的高度被超出时开始在下一列上安排 item 。
spacing 属性描述 item 之间的间隔。
看个示例, flow_layout.qml :
import QtQuick 2.0 import QtQuick.Controls 1.1 Rectangle { width: 360; height: 240; color: "#EEEEEE"; id: rootItem; Text { id: centerText; text: "A Single Text."; anchors.horizontalCenter: parent.horizontalCenter; anchors.top: parent.top; font.pixelSize: 24; font.bold: true; } function setTextColor(clr){ centerText.color = clr; } Flow { anchors.left: parent.left; anchors.leftMargin: 4; anchors.bottom: parent.bottom; anchors.bottomMargin: 4; width: 280; height: 130; spacing: 4; ColorPicker { width: 80; height: 20; color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } ColorPicker { width: 100; height: 40; color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } ColorPicker { color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } ColorPicker { width: 80; height: 25; color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } ColorPicker { width: 35; height: 35; color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } ColorPicker { width: 20; height: 80; color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } ColorPicker { color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } } }
我改变了 ColorPicker 实例的大小,以便观察 Flow 布局的特点:根据自身宽高是否被 item 超出而自动折行。图 8 是 flow 为 LeftToRight (代码中未设置 flow 属性,默认值是 LeftToRight)时的效果:
图 8 流布局,从左到右效果
修改下代码,在 Flow 对象生命内添加 "flow: Flow.TopToBottom;" 这行代码,再次执行 qmlscene flow_layout.qml ,效果如图 9 所示:
图 9 流布局,从上到下效果
如你所见,效果大大不同。
其实可以把流布局想象成英文文字排版系统,一个 item 对应一个单词,横版模式时,从左到右,一行一行安排单词的位置,当接近一行的宽度时,如果下一个单词摆上去就会超出行宽,那就把这个单词放到下一行上,继续排排排……;竖版模式也是类似的……也许你看过竖版书,很容易理解这件事情。
常见布局介绍完了,在学习 Qt Widgets 的布局管理器时,我们知道布局可以嵌套,比如我经常拿 QVBoxLayout 和 QHBoxLayout 嵌套来完成一些界面的布局。那 Qt Quick 中的布局是否可以嵌套呢?
嵌套布局
import QtQuick 2.0 import QtQuick.Controls 1.1 Rectangle { width: 360; height: 240; color: "#EEEEEE"; id: rootItem; Text { id: centerText; text: "A Single Text."; anchors.centerIn: parent; font.pixelSize: 24; font.bold: true; } function setTextColor(clr){ centerText.color = clr; } Row { anchors.left: parent.left; anchors.leftMargin: 4; anchors.bottom: parent.bottom; anchors.bottomMargin: 4; spacing: 4; Column { spacing: 4; ColorPicker { color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } ColorPicker { color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } } Column { spacing: 4; ColorPicker { color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } ColorPicker { color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } } Column { spacing: 4; ColorPicker { color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } ColorPicker { color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } } } }
我在一个 Row 内嵌套了 3 个 Column ,实现了 2x3 的表格布局。执行 qmlscene nested_layout.qml ,可以看到图 10 :
import QtQuick 2.0 import QtQuick.Controls 1.1 Rectangle { width: 360; height: 240; color: "#EEEEEE"; id: rootItem; Text { id: centerText; text: "A Single Text."; anchors.centerIn: parent; font.pixelSize: 24; font.bold: true; } function setTextColor(clr){ centerText.color = clr; } Row { anchors.left: parent.left; anchors.leftMargin: 4; anchors.bottom: parent.bottom; anchors.bottomMargin: 4; spacing: 4; Column { spacing: 4; ColorPicker { color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } ColorPicker { color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } } Column { spacing: 4; ColorPicker { color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } ColorPicker { color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } } //Column { // spacing: 4; ColorPicker { color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } ColorPicker { color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1.0); onColorPicked: setTextColor(clr); } //} } }
注意代码中我只是把最后一个 Column 对象声明给注释掉了,图 11 是运行效果:
相关推荐
第8章 Qt Quick元素布局 第9章 Qt Quick常用元素介绍 第10章 Canvas(画布) 第11章 C++与QML混合编程 第12章 动画 第13章 Model/View 第14章 多媒体 第15章 网络 第16章 定位 第17章 综合实例之文件查看...
从标题“Qt及QtQuick开发实战精解高清PDF”可以得知,这本书主要介绍的是使用Qt框架进行软件开发的实战技巧和深入解析。 Qt是一个跨平台的C++应用程序框架,它为开发者提供了构建图形界面应用程序所需要的各种工具...
这本书详细介绍了Qt Quick 4.8版本,虽然该版本相对较老,但其核心语法和设计原则至今仍具指导意义。Qt Quick通过QML(Qt Meta Object Language)语言,使得开发者能够用声明式语法来定义用户界面,极大地简化了UI的...
**QtQuick简介** QtQuick是Qt框架的一部分,它提供了一个基于声明性QML语言的UI构建工具,使得开发者能够轻松创建美观、动态且高效的用户界面。QML是一种JSON风格的脚本语言,允许通过简单的文本定义来描述界面元素...
**Qt Quick 中文手册概述** Qt Quick 是 Qt 框架的一个重要组成部分,它提供了一种基于声明式语言 QML(Qt Meta Object Language)来设计和实现用户界面的方法。Qt Quick 的设计理念是让开发者能够轻松地创建出美观...
首先,Qt Quick的核心是QML,这是一种声明式语言,允许开发者用简洁的语法描述用户界面的布局和行为。QML通过JSON风格的语法定义UI元素,如按钮、文本框、图像等,同时可以嵌入JavaScript代码来处理事件和逻辑。这种...
《Qt Quick核心编程》这本书是Qt开发者的重要参考资料,它深入探讨了Qt Quick这一强大的图形用户界面(GUI)开发框架。Qt Quick,基于QML(Qt Meta Object Language),允许开发者使用声明式语法创建富媒体、高性能...
5. Qt Quick核心概念:了解QML的语法,掌握如何使用QML创建和布局UI元素,以及如何定义和使用属性、方法和信号。 6. 动态效果与动画:学习如何在Qt Quick应用中实现流畅的动画效果,包括逐帧动画和基于状态的动画。...
《QML和Qt Quick快速入门》示例源码是一份专为初学者设计的资源,旨在帮助理解并掌握QML和Qt Quick这两种强大的GUI开发工具。QML(Qt Meta Language)是Qt框架的一部分,用于创建现代、动态且响应迅速的用户界面。Qt...
总之,《Qt Quick 中文手册》是一本全面介绍Qt Quick开发的指南,无论你是初学者还是有经验的开发者,都能从中获得宝贵的知识和实践指导,帮助你在Qt Quick的世界中游刃有余地构建出高效、美观的应用程序。
QT和QT Quick是Qt框架的两个重要组成部分,用于开发跨平台的桌面和移动应用程序。Qt是一个功能强大的C++库,提供了丰富的图形用户界面(GUI)工具包,而Qt Quick则引入了QML语言,用于更高效、更直观地设计用户界面...
总结来说,"Qt及QtQuick 与 源码"这本书提供了一个全面的学习资源,不仅介绍了Qt和QtQuick的基本概念和技术,还通过实践案例帮助读者掌握这两项技术的运用。通过学习,开发者不仅可以提升自己的技能,还能更好地理解...
6. **3D图形和Qt Quick 3D**:如果书中有涉及,会介绍如何使用Qt Quick进行3D渲染和场景创建。 7. **多媒体支持**:了解如何处理音频和视频,以及与Qt Multimedia模块的集成。 8. **触摸和手势支持**:学习如何在...
- 此例子介绍了如何使用Qt Quick和QML来创建一个简单的用户界面。它涵盖了QML的基本语法、组件的使用以及如何与C++代码进行交互。 3. **状态机与动画** - 在这个例子中,开发者将学习如何使用Qt Quick的状态机来...
在Qt Quick中,你可以通过QML定义UI元素的属性、布局和交互逻辑,实现与C++的无缝集成。QML的简洁语法使得UI设计变得简单,尤其适合快速原型开发。 ### Qt Quick的核心概念 1. **Item**: QML的基础元素,所有可视...
在书中,作者详细介绍了Qt的基础知识,包括安装配置Qt开发环境、Qt Creator的使用以及Qt的C++编程基础。读者将学习到如何创建基本的Qt项目,理解Qt的信号与槽机制,这是Qt编程的核心特性之一,使得组件间的通信变得...
总的来说,创建一个自定义的QtQuick.Controls2 TreeView控件是一个涉及数据绑定、事件处理、布局管理和样式定制的过程。通过这个过程,我们可以更好地理解Qt Quick的编程模式,并能根据具体需求灵活扩展控件的功能。...