我过去曾扩展过QSqlTableModel,但目前我已经卡住了(毕竟还是初学者):
QVariant MyChild::data(const QModelIndex &index, int role) const
{
// Check if (soft)deleted / cancelled
if(index.column() == 3)
{
if(QSqlTableModel::data(index, Qt::DisplayRole).toString() == "1")
{
if(role == Qt::DisplayRole)
{
return "Deleted";
}
if(role == Qt::BackgroundColorRole)
{
return QVariant(QColor(Qt::yellow));
}
// QSqlTableModel::setData(index, QVariant(QColor(Qt::red)), Qt::BackgroundColorRole);
// setData(index, QColor(Qt::red), Qt::BackgroundColorRole);
}
}
return QSqlTableModel::data(index, role);
}
现在这对它的功能非常有用。它将表中的字段染成黄色,但我希望整个行都是彩色的。所以你可以一眼看到这条记录已被(软)删除了。
正如你所看到的,我已经尝试过调用setData,但无济于事。 (当然我会为这一行中的每个索引执行此操作,但因为它不起作用我停在那里。)
有关于此的任何想法吗?我在网上搜索了很多,但我似乎无法找到一种方法来为整行着色。
答案 0 :(得分:1)
我会做那样的事情(根本不是测试,所以可能需要调整):
QVariant MyChild::data(const QModelIndex &index, int role)
{
// Check if (soft)deleted / cancelled
if(role == Qt::DisplayRole && index.column() == 3 && QSqlTableModel::data(index, Qt::DisplayRole).toString() == "1")
{
return "Deleted";
}
else if(role == Qt::BackgroundColorRole)
{
QModelIndex tmpIdx = QSqlTableModel::index(index.row(), 3, index.parent());
if(QSqlTableModel::data(tmpIdx, Qt::DisplayRole).toString() == "1")
{
return QVariant(QColor(Qt::yellow));
}
}
return data(index, role);
}
因此,如果指定的列表明该行已被删除,请检查每个modelindex。检查是否" tmpIdx"是有效的......