我正在使用QTableView和QAbstractTableModel。
我已经为QAbstractTableModel
创建了子类,并且在Qt::BackgroundRole
和Qt::ForegroundRole
的模型类中,我根据某些条件返回了一些颜色。
我已经将QTableView
类子类化了。
当我选择表格中的任何行/单元格时,行/单元格以tabelVeiw的默认颜色突出显示,它不显示从我的模型类返回的颜色。
如何更改此行为?如何避免/忽略QTableView
的默认着色并且只使用我的模型类返回的颜色?
答案 0 :(得分:1)
您必须使用自定义委托。
将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);
}
如果你想从模型中获得selecion颜色,我建议为此目的定义一个特殊的自定义角色:
enum MyRoles
{
HighlightColorRole = Qt::UserRole
};
您的模型将使用此角色通过QAbstractItemModel::data()
方法返回自定义突出显示(选择)颜色。
在你的代表中你可以获得这样的颜色:
QColor color = index.data(HighlightColorRole).value<QColor>();