QSqlRelationalTableModel QTableView着色行

时间:2017-06-28 06:21:41

标签: c++ qt qt5 qtableview qsqlrelationaltablemodel

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

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

为什么它不能像以下一样简单?有什么想法吗?

model->setData( model->index( index.row(), index.column() ), 
                QBrush(Qt::red),
                Qt::BackgroundRole );

1 个答案:

答案 0 :(得分:1)

你应该覆盖QSqlRelationalTableModel的数据函数,当你根据你的情况得到Qt :: BackgroundRole角色进行过滤并返回相应的QBrush时,在下面的例子中按外部字段过滤并检查它是否等于< EM>利马:

示例:

<强> sqlrelationaltablemodel.h

#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

#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);
}

输出:

enter image description here

可以找到完整的示例here