首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QSqlRelationalTableModel QTableView着色行

QSqlRelationalTableModel QTableView着色行
EN

Stack Overflow用户
提问于 2017-06-28 06:21:40
回答 1查看 146关注 0票数 2

QTableView中对行进行彩色编码的正确方法是什么?

我正在开发一个电子表格应用程序,它应该根据其中一个列中的特定值对其行进行颜色编码。我使用QSqlRelationalTableModelQSqlRelationalDelegate;因为应该确定颜色的值是外键。

为什么不能像下面这样简单呢?有什么想法吗?

代码语言:javascript
复制
model->setData( model->index( index.row(), index.column() ), 
                QBrush(Qt::red),
                Qt::BackgroundRole );
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-28 08:09:18

您应该重写QSqlRelationalTableModel的数据函数,当您得到Qt ::BackgroundRole角色时,根据您的情况进行筛选并返回适当的QBrush,在下面的示例中,由外域筛选并检查它是否等于Lima

示例:

sqlrelationaltablemodel.h

代码语言:javascript
复制
#ifndef SQLRELATIONALTABLEMODEL_H
#define SQLRELATIONALTABLEMODEL_H

#include <QSqlRelationalTableModel>

class SqlRelationalTableModel : public QSqlRelationalTableModel
{
    Q_OBJECT
public:
    SqlRelationalTableModel(QObject * parent = 0, QSqlDatabase db = QSqlDatabase());

     QVariant data(const QModelIndex & item, int role = Qt::DisplayRole) const;
};

#endif // SQLRELATIONALTABLEMODEL_H

sqlrelationaltablemodel.cpp

代码语言:javascript
复制
#include "sqlrelationaltablemodel.h"

#include <QBrush>

SqlRelationalTableModel::SqlRelationalTableModel(QObject *parent, QSqlDatabase db)
    :QSqlRelationalTableModel(parent, db)
{

}

QVariant SqlRelationalTableModel::data(const QModelIndex &item, int role) const
{
    if(role == Qt::BackgroundRole)
        if(QSqlRelationalTableModel::data(index(item.row(), 2), Qt::DisplayRole).toString().trimmed() == "Lima")
                        return QVariant(QBrush(Qt::red));
    return QSqlRelationalTableModel::data(item, role);
}

输出:

完整的示例可以找到这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44795004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档