我正在使用带有 QAbstractTableModel 的 QTableView。
我已经对 QAbstractTableModel
进行了子类化,并且在 Qt::BackgroundRole
和 Qt::ForegroundRole
的模型类中,我返回了一些颜色,具体取决于一些条件。
我已经对 QTableView
类进行了子类化。
当我选择表格上的任何行/单元格时,该行/单元格将以 tabelVeiw 的默认颜色突出显示,它不显示从我的模型类返回的颜色。
如何改变这种行为?如何避免/忽略 QTableView
的默认颜色并仅使用我的模型类返回的颜色?
最佳答案
您必须使用自定义委托(delegate)。委托(delegate)。
子类化 QStyledItemDelegate
并实现它的 paint()
方法,如下所示:
void MyDelegate::paint(QPainter* painter, const QStyleOptionViewItem & option, const QModelIndex & index) const
{
QStyleOptionViewItem itemOption(option);
initStyleOption(&itemOption, index);
if ((itemOption.state & QStyle::State_Selected) &&
(itemOption.state & QStyle::State_Active))
itemOption.palette.setColor(QPalette::Highlight, Qt::red); // set your color here
QApplication::style()->drawControl(QStyle::CE_ItemViewItem, &itemOption, painter, nullptr);
}
如果您想从模型中获取选择颜色,我建议为此目的定义一个特殊的自定义角色:
enum MyRoles
{
HighlightColorRole = Qt::UserRole
};
您的模型将使用此角色通过 QAbstractItemModel::data()
方法返回自定义突出显示(选择)颜色。
在您的委托(delegate)中,您可以像这样获取该颜色:
QColor color = index.data(HighlightColorRole).value<QColor>();
关于qt - 更改 QTableView 的默认选择颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35412351/