如何在 TableView QtQuick.Controls 2.4 中实现 TableView QtQuick.Controls 1.4 的 Selectable future
Posted
技术标签:
【中文标题】如何在 TableView QtQuick.Controls 2.4 中实现 TableView QtQuick.Controls 1.4 的 Selectable future【英文标题】:How to implement Selectable future of TableView QtQuick.Controls 1.4 in TableView QtQuick.Controls 2.4 【发布时间】:2021-08-21 06:58:19 【问题描述】:如何在QtQuick.Controls.TableView > 2
中实现行选择?默认情况下,在版本 1 中我们有它:
我们可以通过单击其中一个来连续选择整个项目。这如何在QtQuick.Controls.TableView
的第 2 版上实现?
我检查了这些:
https://***.com/a/62636354/9248466 https://www.youtube.com/watch?v=vwukO5Vusv8但是,我还是没能实现它。这是我的实现尝试:
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import Qt.labs.qmlmodels 1.0
Window
width: 640
height: 480
visible: true
title: qsTr("Hello World")
TableView
id: table
anchors.fill: parent
columnWidthProvider: function(column)
return 100;
model: TableModel
TableModelColumn display: "name"
TableModelColumn display: "color"
rows: [
"name": "cat",
"color": "black"
,
"name": "dog",
"color": "brown"
,
"name": "bird",
"color": "white"
]
delegate: ItemDelegate
readonly property color defaultTextColor: "orange";
readonly property color defaultBackgroundColor: "#222";
readonly property color defaultBorderColor: "black";
readonly property color selectedTextColor: "white";
readonly property color selectedBackgroundColor: "#997300";
readonly property color selectedBorderColor: "cyan";
property bool select: table.currentIndex === index
property color textColor: defaultTextColor;
property color backgroundColor: defaultBackgroundColor;
property color borderColor: defaultBorderColor;
background: Rectangle
anchors.fill: parent;
color: select ? selectedBackgroundColor : backgroundColor; // <----
border.color: borderColor;
border.width: 0.5;
contentItem: Text
id: contentItemText
text: model.display;
clip: true;
color: textColor;
anchors.centerIn: parent;
我的环境:
操作系统:Fedora 34 编译器:GCC 11.2.1 Qt:5.15.2【问题讨论】:
【参考方案1】:QtQuick TableView 中没有 currentIndex 属性,因此您必须创建并实现该属性,在这种情况下,我将实现 currentRow,该属性会在单击行中的任何项目时发生变化。
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Window 2.15
import Qt.labs.qmlmodels 1.0
Window
width: 640
height: 480
visible: true
title: qsTr("Hello World")
TableView
id: table
property int currentRow: -1
anchors.fill: parent
columnWidthProvider: function(column)
return 100;
model: TableModel
rows: [
"name": "cat",
"color": "black"
,
"name": "dog",
"color": "brown"
,
"name": "bird",
"color": "white"
]
TableModelColumn
display: "name"
TableModelColumn
display: "color"
delegate: ItemDelegate
id: itemDelegate
readonly property color defaultTextColor: "orange"
readonly property color defaultBackgroundColor: "#222"
readonly property color defaultBorderColor: "black"
readonly property color selectedTextColor: "white"
readonly property color selectedBackgroundColor: "#997300"
readonly property color selectedBorderColor: "cyan"
property bool select: TableView.view.currentRow === row
property color textColor: defaultTextColor
property color backgroundColor: defaultBackgroundColor
property color borderColor: defaultBorderColor
background: Rectangle
anchors.fill: parent
color: select ? selectedBackgroundColor : backgroundColor
border.color: borderColor
border.width: 0.5
contentItem: Text
id: contentItemText
text: model.display
clip: true
color: textColor
anchors.centerIn: parent
MouseArea
anchors.fill: parent
onClicked: itemDelegate.TableView.view.currentRow = row
【讨论】:
以上是关于如何在 TableView QtQuick.Controls 2.4 中实现 TableView QtQuick.Controls 1.4 的 Selectable future的主要内容,如果未能解决你的问题,请参考以下文章
如何在tableview Cell内设置tableView的自动高度?
在tableview中使用refreshcontrol时,如何知道用户是不是还在按住tableview?
如何在 iOS 中创建具有动态 tableview 高度的动态 tableview 单元格
如何保持 Tableview 滚动以及如何在 Swift3 中删除原型单元和 tableview 之间的空白空间
如何在 tableView:(UITableView *)tableView heightForRowAtIndexPath 函数中获取单元格对象?
如何将 panGestureRecognizer 添加到 TableView,并且在识别平底锅时仍然让 tableview 滚动?