Итак, когда пользователь нажимает на строку, цвет этой строки должен измениться. Это то, что я пробовал. Это не работает.
Здесь table
— идентификатор моего QML TableView
.
Пусть цвет по умолчанию будет синим, а при щелчке он должен измениться на красный.
rowDelegate:
Rectangle
{
id: rowDel
color:
{
var activeRow = table.currentRow === styleData.row;
(activeRow ? mouse_area.pressed ? "red" : "blue" : "white")
}
border.width: 1
height: 52
width: 2000
MouseArea
{
id: mouse_area
anchors.fill: parent
}
}
Вместо styleData.row используйте styleData.selected
.
Вот пример, который я написал для вас, чтобы продемонстрировать предлагаемое решение:
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 1.4
Window {
width: 320
height: 200
visible: true
title: qsTr("TableView")
ListModel {
id: libraryModel
ListElement {
title: "A Masterpiece"
author: "Gabriel"
}
ListElement {
title: "Brilliance"
author: "Jens"
}
ListElement {
title: "Outstanding"
author: "Frederik"
}
}
TableView {
id: table
anchors.fill: parent
model: libraryModel
rowDelegate: Rectangle {
color: styleData.selected ? "red" : "blue"
width: 2000
height: 40
border.width: 1
}
TableViewColumn {
role: "title"
title: "Title"
width: 100
}
TableViewColumn {
role: "author"
title: "Author"
width: 200
}
}
}
Приведенный пример дает следующий результат:
С выбранной второй строкой.
С выбранной последней строкой.
Великолепно! Есть решение для Qt Quick Controls 2? Похоже, что версия 1 устарела в Qt 5.11 и была удалена в Qt 6.0. Новый TableView
кажется намного сложнее делать эти базовые вещи.
Если вы добавите обработчик
onClicked
в свой MouseArea, он будет вызван? (Поместите оператор печати внутрь.)