1

我正在使用带有 QAbstractTableModel 的 QTableView。

我已经QAbstractTableModel在我的模型类中进行了子类化,Qt::BackgroundRole并且Qt::ForegroundRole根据某些条件返回了一些颜色。

我有子QTableView类。

当我选择表格上的任何行/单元格时,行/单元格以 tabelVeiw 的默认颜色突出显示,它不显示从我的模型类返回的颜色

我怎样才能改变这种行为?我怎样才能避免/忽略这种默认颜色,QTableView并且只有我的模型类返回的颜色?

4

1 回答 1

2

您必须使用自定义委托。子类化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()

在您的委托中,您可以像这样获得该颜色:

QColor color = index.data(HighlightColorRole).value<QColor>();
于 2016-02-15T15:39:11.783 回答