💂 个人主页:pp不会算法v
🤟 版权: 本文由【pp不会算法v】原创、在CSDN首发、需要转载请联系博主
💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦
QML系列教程
QML教程一:布局组件
文章目录
- 列表视图ListView
-
- 网格视图GridView
-
- 表格视图TableView
-
- 滚动视图ScrollView
-
- 树形视图TreeView
-
- 分页视图TabView
-
- 拆分视图SplitView
-
- 滑动视图SwipeView
-
- 路径视图PathView
-
列表视图ListView
属性
属性名 | 是否只读 | 说明 | 默认值 |
---|
add | | 添加元素时的过渡效果。 | 无 |
addDisplaced | | 添加元素时其他元素受到影响的过渡效果。 | 无 |
cacheBuffer | | 缓存区域大小,用于视图快速滑动时提高性能。 | 0 |
count | 只读 | 列表项数量。 | 0 |
currentIndex | | 当前选中项的索引。 | -1 |
currentItem | | 当前选中项的Item对象。 | null |
currentSection | 只读 | 当前选中项所在分段的标签。 | “” |
delegate | | 定义每个列表项的组件。 | null |
displaced | | 删除元素时其他元素受到影响的过渡效果。 | 无 |
displayMarginBeginning | | 起始边缘显示区域大小。 | 0 |
displayMarginEnd | | 结束边缘显示区域大小。 | 0 |
effectiveLayoutDirection | 只读 | 由 layoutDirection 和 QT 的国际化功能决定的实际布局方向。 | Qt.LeftToRight |
footer | | 列表脚部的组件。 | null |
footerItem | 只读 | 列表脚部的Item对象。 | null |
footerPositioning | | 列表脚部的位置。 | ListView.End |
header | | 列表头部的组件。 | null |
headerItem | 只读 | 列表头部的Item对象。 | null |
headerPositioning | | 列表头部的位置。 | ListView.Beginning |
highlight | | 当前选中项的视觉效果。 | null |
highlightFollowsCurrentItem | | 当前选中项改变时,是否更新 highlightItem 的属性。 | true |
highlightItem | 只读 | 当前选中项的Item对象。 | null |
highlightMoveDuration | | 视觉效果移动时长。 | 250 |
highlightMoveVelocity | | 视觉效果移动速度。 | 0 |
highlightRangeMode | | 高亮模式。 | ListView.StrictlyEnforceRange |
highlightResizeDuration | | 视觉效果大小变化时长。 | 50 |
highlightResizeVelocity | | 视觉效果大小变化速度。 | 0 |
keyNavigationEnabled | | 是否响应键盘导航事件。 | true |
keyNavigationWraps | | 是否在到达列表边界时循环导航。 | false |
layoutDirection | | 布局方向。 | Qt.LeftToRight |
model | | 列表使用的模型对象。 | null |
move | | 移动元素时的过渡效果。 | 无 |
moveDisplaced | | 移动元素时其他元素受到影响的过渡效果。 | 无 |
orientation | | 列表方向。 | Qt.Vertical |
populate | | 初始化时添加元素的过渡效果。 | 无 |
preferredHighlightBegin | | 高亮条的起始位置。 | 0 |
preferredHighlightEnd | | 高亮条的结束位置。 | 0 |
remove | | 删除元素时的过渡效果。 | 无 |
removeDisplaced | | 删除元素时其他元素受到影响的过渡效果。 | 无 |
section | | 分段列表项属性的信息。 | 无 |
section.property | | 分段属性名。 | undefined |
section.criteria | | 分段标准。 | ListView.Direct |
section.delegate | | 定义每个分段的组件。 | null |
section.labelPositioning | | 分段列表中标签的位置。 | ListView.SectionLeading |
snapMode | | 滑动到指定位置时是否对齐。 | ListView.NoSnap |
spacing | | 列表项之间的间距。 | 0 |
verticalLayoutDirection | | 垂直布局方向。 | ListView.TopToBottom |
信号
信号名 | 说明 |
---|
add() | 添加元素后触发。 |
remove() | 删除元素后触发。 |
函数
方法名 | 说明 |
---|
decrementCurrentIndex() | 将 currentIndex 属性值减一。 |
forceLayout() | 强制进行重新布局。 |
incrementCurrentIndex() | 将 currentIndex 属性值加一。 |
indexAt(real x, real y) | 返回指定坐标处的列表项索引。 |
itemAt(real x, real y) | 返回指定坐标处的列表项 Item 对象。 |
positionViewAtBeginning() | 将当前视图滚动至最开始位置。 |
positionViewAtEnd() | 将当前视图滚动至最末尾位置。 |
positionViewAtIndex(int index, PositionMode mode) | 将视图滚动至指定索引处。关于 PositionMode 枚举类型的取值意义,可查看 官方文档。 |
示例
ListView {
id:view
highlight: Item{Rectangle { color: "lightsteelblue"; radius: 5 }}
focus: true
spacing:10
width: parent.width
height: parent.height*(2/3)
model:10
orientation: "Horizontal"
delegate:
Rectangle {
width: view.width/4
height: view.height
color: "pink"
Text {
text: "rect" + index
}
}
网格视图GridView
属性
属性名 | 类型 | 描述 |
---|
add | Transition | 在GridView中添加项的过渡动画 |
addDisplaced | Transition | 在GridView中添加位移项的过渡动画 |
cacheBuffer | int | 缓存项数量 |
cellHeight | real | 单元格高度 |
cellWidth | real | 单元格宽度 |
count | int | 项数 |
currentIndex | int | 当前项的索引 |
currentItem | Item | 当前项 |
delegate | Component | 用于创建项的委托 |
displaced | Transition | 移除GridView中的位移项的过渡动画 |
displayMarginBeginning | int | 起始边距 |
displayMarginEnd | int | 结束边距 |
effectiveLayoutDirection | enumeration | 有效布局方向(从左到右或从右到左) |
flow | enumeration | 流程方向(水平、垂直或倾斜) |
footer | Component | 页脚组件 |
footerItem | Item | 页脚项 |
header | Component | 页眉组件 |
headerItem | Item | 页眉项 |
highlight | Component | 高亮项的委托 |
highlightFollowsCurrentItem | bool | 高亮项是否始终跟随当前项 |
highlightItem | Item | 要高亮的项 |
highlightMoveDuration | int | 高亮项移动过渡时间(以毫秒为单位) |
highlightRangeMode | enumeration | 高亮项模式,用于指定将哪些项考虑为高亮范围 |
keyNavigationEnabled | bool | 是否启用键盘导航 |
keyNavigationWraps | bool | 当到达最后一项或第一项时,是否循环到另一端 |
layoutDirection | enumeration | 布局方向(从左到右或从右到左) |
model | model | 数据模型 |
move | Transition | 移除GridView中的项的过渡动画 |
moveDisplaced | Transition | 移除GridView中的位移项的过渡动画 |
populate | Transition | 在GridView中填充所有项的过渡动画 |
preferredHighlightBegin | real | 高亮框开始位置的推荐值 |
preferredHighlightEnd | real | 高亮框结束位置的推荐值 |
remove | Transition | 移除GridView中的项的过渡动画 |
removeDisplaced | Transition | 移除GridView中的位移项的过渡动画 |
snapMode | enumeration | 自动对齐模式(禁用、开始、中间或结束位置) |
verticalLayoutDirection | enumeration | 垂直布局方向(从上到下或从下到上) |
信号
信号名 | 描述 |
---|
add() | 当在GridView中添加项时发出 |
remove() | 当在GridView中删除项时发出 |
currentIndexChanged(int index) | 当当前项的索引更改时发出 |
函数
函数名 | 描述 |
---|
forceLayout() | 强制对GridView进行重新布局 |
indexAt(real x, real y) | 返回位于指定坐标的项的索引 |
itemAt(real x, real y) | 返回位于指定坐标的项 |
moveCurrentIndexDown() | 将当前项向下移动一格 |
moveCurrentIndexLeft() | 将当前项向左移动一格 |
moveCurrentIndexRight() | 将当前项向右移动一格 |
moveCurrentIndexUp() | 将当前项向上移动一格 |
positionViewAtBeginning() | 将视图位置设置为第一项 |
positionViewAtEnd() | 将视图位置设置为最后一项 |
positionViewAtIndex(int index, PositionMode mode) | 将视图位置设置为指定索引处的项,使用指定的位置模式 |
示例
GridView {
width: 300; height: 200
cellWidth: 80; cellHeight: 80
model: ListModel {
ListElement { name: "Alice"; number: "1234" }
ListElement { name: "Bob"; number: "5678" }
ListElement { name: "Charlie"; number: "91011" }
}
Component {
id: contactsDelegate
Rectangle {
id: wrapper
width:120
height: 80
color: GridView.isCurrentItem ? "black" : "red"
Text {
id: contactInfo
text: name + ": " + number
color: wrapper.GridView.isCurrentItem ? "red" : "black"
}
}
}
delegate: contactsDelegate
focus: true
}
表格视图TableView
好的,以下是根据你提供的属性、信号和方法的详细表格,使用Markdown语法排版:
属性
属性名 | 类型 | 描述 |
---|
columnSpacing | real | 列间距 |
columnWidthProvider | var | 列宽度提供者 |
columns | int | 列数 |
contentHeight | real | 内容高度 |
contentWidth | real | 内容宽度 |
delegate | Component | 项委托 |
model | model | 模型 |
reuseItems | bool | 是否重用项 |
rowHeightProvider | var | 行高度提供者 |
rowSpacing | real | 行间距 |
rows | int | 行数 |
view | TableView | 所属的TableView视图 |
信号
信号名 | 描述 |
---|
pooled() | 池化时触发的信号 |
reused() | 重用时触发的信号 |
方法
示例
ListModel {
id: libraryModel
ListElement {
title: "A Masterpiece"
author: "Gabriel"
}
ListElement {
title: "Brilliance"
author: "Jens"
}
ListElement {
title: "Outstanding"
author: "Frederik"
}
}
TableView {
TableViewColumn {
role: "title"
title: "Title"
width: 100
}
TableViewColumn {
role: "author"
title: "Author"
width: 200
}
model: libraryModel
}
滚动视图ScrollView
属性
属性 | 说明 |
---|
contentChildren : list | 该列表包含已在QML中声明为视图的子项的所有项。 |
contentData : list | 该列表包含已在QML中声明为视图的子对象的所有对象。 |
示例
ScrollView {
width: 200
height: 200
clip: true
Label {
text: "ABC"
font.pixelSize: 224
}
}
树形视图TreeView
属性
属性 | 描述 |
---|
currentIndex | 当前选中的 table view 单元格 |
itemDelegate | 表格单元格使用的代理组件 |
model | 用于显示表格数据的 model |
rootIndex | 表示模型中一个项目的索引,它可作为 TableView 视图项的根索引 |
section | 指定表头的一般特性以及每个表头所代表的列或行的选择准则 |
selection | 存储当前所选项的模型。 |
信号
信号 | 描述 |
---|
activated(QModelIndex index) | 当用户双击或者按下 Enter 键时发出。 |
clicked(QModelIndex index) | 当用户单击一个单元格时发出 |
collapsed(QModelIndex index) | 当用户折叠一个项时发出 |
doubleClicked(QModelIndex index) | 当用户双击一个单元格时发出 |
expanded(QModelIndex index) | 当用户展开一个项时发出 |
pressAndHold(QModelIndex index) | 当用户按住一个项时发出 |
函数
函数 | 描述 |
---|
void collapse(QModelIndex index) | 折叠一个项 |
void expand(QModelIndex index) | 展开一个项 |
QModelIndex indexAt(int x, int y) | 返回在点 (x, y) 处找到的表格单元格的 QModelIndex;如果这个点不在任何一个表格单元格内,则返回无效的 QModelIndex |
bool isExpanded(QModelIndex index) | 检查给定的索引是否已经展开 |
示例
ListModel {
id: fileSystemModel
ListElement {
fileName: "file1.txt"
filePermissions: "rw"
}
ListElement {
fileName: "file2.doc"
filePermissions: "r"
}
ListElement {
fileName: "file3.jpg"
filePermissions: "r"
}
}
TreeView {
width: parent.width
height: parent.height
TableViewColumn {
title: "Name"
role: "fileName"
width: 300
}
TableViewColumn {
title: "Permissions"
role: "filePermissions"
width: 150
}
model: fileSystemModel
}
分页视图TabView
属性
属性名 | 类型 | 描述 |
---|
contentItem | Item | TabView 的内容项。 |
count | int | 当前的标签页数量。 |
currentIndex | int | 当前选中的标签页索引。 |
frameVisible | bool | 标签页内容周围边框的可见性。 |
tabPosition | int | 标签的位置,默认为顶部。可选值为 Qt.TopEdge(顶部)和 Qt.BottomEdge(底部)。 |
tabsVisible | bool | 标签栏的可见性。 |
函数
函数名 | 参数类型 | 描述 |
---|
addTab | string, Component | 添加一个指定标题和组件的新标签页。 |
getTab | int | 返回指定索引处的 Tab 对象。 |
insertTab | int, string, Component | 在指定索引处插入一个具有指定标题和组件的新标签页。 |
moveTab | int, int | 将一个标签页从一个索引位置移动到另一个。 |
removeTab | int | 移除并销毁指定索引处的标签页。 |
示例
TabView {
Tab {
title: "Red"
Rectangle { color: "red" }
}
Tab {
title: "Blue"
Rectangle { color: "blue" }
}
Tab {
title: "Green"
Rectangle { color: "green" }
}
}
拆分视图SplitView
SplitView是一个控件,用于水平或垂直排列项目,每个项目之间有一个可拖动的拆分器。
SplitView中始终有一个(并且只有一个)项目的Layout.fillWidth设置为true(或者Layout.fillHeight,如果方向为Qt.Vertical)。这意味着在布局其他项目时,该项目将获得所有剩余空间。默认情况下,SplitView的最后一个可见子项将具有此设置,但可以通过在另一个项上将fillWidth显式设置为true来更改此设置。
由于fillWidth项目将自动调整大小以适应额外的空间,因此将忽略对其宽度和高度属性的显式指定(但仍将尊重Layout.miminimumWidth和Layout.maxiumWidth)。其他项目的初始尺寸应通过其宽度和高度属性进行设置。一旦用户拖动项目的拆分器句柄,对该项目的宽度或高度的任何绑定分配都将被打断。
手柄可以属于左侧或上侧的项目,也可以属于右侧或下侧的项目: 如果fillWidth项在右侧:则句柄属于左侧项。
如果fillWidth项在左侧:句柄属于右侧项。
属性
属性名 | 类型 | 描述 |
---|
handleDelegate | Component | 定义拖拽调整分割条操作时使用的图形元素。 |
orientation | int | 分割条的方向。可选值为 Qt.Horizontal(水平方向)和 Qt.Vertical(竖直方向)。 |
resizing | bool | 指定是否允许用户拖拽调整分割条大小。默认值为 true。 |
函数
函数名 | 参数类型 | 描述 |
---|
addItem | Item | 在 SplitView 中添加一个项。 |
removeItem | Item | 从 SplitView 中移除一个项。 |
示例
SplitView {
anchors.fill: parent
orientation: Qt.Horizontal
Rectangle {
width: 200
Layout.maximumWidth: 400
color: "lightblue"
Text {
text: "View 1"
anchors.centerIn: parent
}
}
Rectangle {
id: centerItem
Layout.minimumWidth: 50
Layout.fillWidth: true
color: "lightgray"
Text {
text: "View 2"
anchors.centerIn: parent
}
}
Rectangle {
width: 200
color: "lightgreen"
Text {
text: "View 3"
anchors.centerIn: parent
}
}
}
滑动视图SwipeView
允许滑动的多页窗口
属性
属性名 | 是否只读 | 说明 | 默认值 |
---|
horizontal | 只读 | 是否为横向的滑动视图。 | 无 |
interactive | | 是否允许用户进行交互操作。 | true |
orientation | | 视图的方向,可选值为“Horizontal”和“Vertical”。 | “Horizontal” |
vertical | 只读 | 是否为纵向的滑动视图。 | 无 |
示例
SwipeView {
id: view
currentIndex: 1
anchors.fill: parent
Item {
id: firstPage
Text{
anchors.centerIn:parent
text:"第一页"
}
}
Item {
id: secondPage
Text{
anchors.centerIn:parent
text:"第二页"
}
}
Item {
id: thirdPage
Text{
anchors.centerIn:parent
text:"第三页"
}
}
}
PageIndicator {
id: indicator
count: view.count
currentIndex: view.currentIndex
anchors.bottom: view.bottom
anchors.horizontalCenter: parent.horizontalCenter
}
路径视图PathView
属性
属性名 | 类型 | 描述 |
---|
cacheItemCount | int | 缓存的项数量 |
count | int | 项的总数 |
currentIndex | int | 当前选中项的索引 |
currentItem | Item | 当前选中的项 |
delegate | Component | 定义了每个项的视觉外观和布局 |
dragMargin | real | 拖拽操作的边距 |
dragging | bool | 是否正在拖拽 |
flickDeceleration | real | 手势滑动减速度,用于控制滑动停止的速度 |
flicking | bool | 是否正在进行手势滑动 |
highlight | Component | 高亮项的视觉外观 |
highlightItem | Item | 高亮的项 |
highlightMoveDuration | int | 高亮项移动的持续时间 |
highlightRangeMode | enumeration | 高亮范围模式,定义了如何确定高亮项的范围 |
interactive | bool | 是否可以与 PathView 进行交互 |
maximumFlickVelocity | real | 手势滑动的最大速度 |
model | model | 数据源模型 |
movementDirection | enumeration | 项之间的移动方向 |
moving | bool | 是否正在进行项之间的移动 |
offset | real | 视图相对于其内容的偏移量 |
path | Path | 定义路径视图的路径 |
pathItemCount | int | 路径中的项的数量 |
preferredHighlightBegin | real | 高亮范围的起始位置,参考值为 0-1 |
preferredHighlightEnd | real | 高亮范围的结束位置,参考值为 0-1 |
snapMode | enumeration | 对齐模式,定义了如何对齐项 |
附加属性:
属性名 | 类型 | 描述 |
---|
isCurrentItem | bool | 是否为当前选中的项 |
onPath | bool | 指示项是否在路径上 |
view | PathView | 关联的 PathView 对象 |
信号
信号名 | 描述 |
---|
dragEnded() | 拖拽结束时发射 |
dragStarted() | 拖拽开始时发射 |
flickEnded() | 手势滑动结束时发射 |
flickStarted() | 手势滑动开始时发射 |
movementEnded() | 项移动结束时发射 |
movementStarted() | 项移动开始时发射 |
函数
函数名 | 参数类型 | 描述 |
---|
decrementCurrentIndex() | | 当前选中项索引减1 |
incrementCurrentIndex() | | 当前选中项索引加1 |
indexAt(real x, real y) | real, real | 返回指定位置处的索引 |
itemAt(real x, real y) | real, real | 返回指定位置处的项 |
positionViewAtIndex(int index, PositionMode mode) | int, PositionMode | 将视图滚动到指定索引位置 |
示例
Rectangle
{
anchors.fill: parent
Component
{
id: delegate
Column
{
id: wrapper
opacity: PathView.isCurrentItem ? 1 : 0.5
Image
{
anchors.horizontalCenter: nameText.horizontalCenter
width: 64; height: 64
source: icon
}
Text
{
id: nameText
text: name
font.pointSize: 16
}
}
}
PathView
{
anchors.fill: parent
model: ListModel
{
ListElement
{
name: "1"
icon: "qrc:/qml.jpg"
}
ListElement
{
name: "2"
icon: "qrc:/qml.jpg"
}
ListElement
{
name: "3"
icon: "qrc:/qml.jpg"
}
}
delegate: delegate
path: Path
{
startX: 120; startY: 100
PathQuad { x: 120; y: 25; controlX: 260; controlY: 75 }
PathQuad { x: 120; y: 100; controlX: -20; controlY: 75 }
}
}
}