qt - 更改 QTableView 的默认选择颜色

标签 qt qtableview qabstracttablemodel

我正在使用带有 QAbstractTableModel 的 QTableView。

我已经对 QAbstractTableModel 进行了子类化,并且在 Qt::BackgroundRoleQt::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/

相关文章:

c++ - 获取 QString 时出现段错误

c++ - Linux 上的 Qt 应用程序如何崩溃并且堆栈中没有我的代码(只有 QT 代码和标准库)?

c++ - 根据一些字符串设置 qtableview 的当前索引

python - 通过 Qt 和 Python 在 QTableView 中使用 QCompleter

c++ - Qt:如何在模型/ View 设置中同步访问来自多个线程的数据?

python - 在不删除内容的情况下在 PyQt QAbstractTableModel 中编辑表格

qt - QMAKE 在 make 文件的 lib 路径中添加额外的引号

c++ - std::list 元素分配在哪里?

c++ - 如何将 txt 文件中的值插入 Qlist 并使用 QTablewideget

qt4 - 将分隔符添加到 QTableView 的操作?