【发布时间】:2020-01-17 03:28:05
【问题描述】:
我有一个包含 3 列的表格:{"Scanned","Qty", "Item"}。如果“已扫描”和“数量”列值匹配,我会尝试突出显示特定行。我看到一些帖子说要在下面实现它
data(const QModelIndex &index, int role) const
我已经尝试如下改变表格行的背景颜色,但它似乎没有按建议工作:
QVariant TransitItemTableModel::data(const QModelIndex &index, int role) const
{
switch (role) {
case TableDataRow:
{
return table.at(index.row()).at(index.column());
}
case HeadingRow:
{
if (index.row() == 0) {
return true;
} else {
return false;
}
}
case Qt::BackgroundRole:
{
QBrush redBackground(Qt::green);
return redBackground;
}
default:
break;
}
return QVariant();
}
我在打电话
发出数据已更改 在下面的代码中:
bool TransitItemTableModel::setData(const QModelIndex &index, const QVariant &value,
int role) {
if (!index.isValid() ||
index.row() < 0 || index.row() >= table.size())
return false;
QList<QString> list1 = value.value<QList<QString>>();
QVector<QString> list2 = list1.toVector();
table.replace(index.row(), list2);
emit dataChanged(index, index, {TableDataRow});
return true;
}
仅供参考,我定义了以下角色:
enum TableRoles {
TableDataRow = Qt::UserRole + 1,
HeadingRow
};
关于 QML 代码,我使用以下代码显示为 Table.qml,代码的下部显示了使用此 Table.qml 的部分代码:
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12
TableView {
id: root
anchors.fill: parent
clip: true
signal clicked(int row, int column)
property var columnWidths: [0.5, 0.5] // as fractions of parent width
// preferably overwrite this when using
columnWidthProvider: function (column) { return Math.max(parent.width * columnWidths[column], 1) }
delegate: Rectangle {
implicitHeight: text.implicitHeight
border.color: "#dddddd"
color: (heading==true)?"#dddddd":"white"
Text {
id: text
text: tabledata
width: parent.width
wrapMode: Text.Wrap
padding: 5
}
MouseArea{
anchors.fill: parent
onClicked: root.clicked(model.row, model.column)
}
}
}
Rectangle {
color: "transparent"
Layout.fillWidth: true
Layout.preferredHeight: parent.height - 250
Components.Table {
model: _transitItemTableModelAPI
columnWidths: [0.2, 0.15, 0.65]
}
}
【问题讨论】:
标签: qt