QSqlRelationalTableModel QTableView 着色行
QSqlRelationalTableModel QTableView colorizing rows
在 QTableView
中对行进行颜色编码的正确方法是什么?
我正在开发一个电子表格应用程序,该应用程序应根据其中一列中设置的特定值对其行进行颜色编码。我使用 QSqlRelationalTableModel
和 QSqlRelationalDelegate
;因为,应该确定颜色的值是外键。
为什么不能像下面这样简单呢?有什么想法吗?
model->setData( model->index( index.row(), index.column() ),
QBrush(Qt::red),
Qt::BackgroundRole );
您应该覆盖 QSqlRelationalTableModel 的数据函数,当您获得 Qt::BackgroundRole 角色时,根据您的情况进行过滤,return 适当的 QBrush,在以下示例中按外部字段过滤并检查它等于 Lima:
示例:
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);
}
输出:
可以找到完整的示例 here。
在 QTableView
中对行进行颜色编码的正确方法是什么?
我正在开发一个电子表格应用程序,该应用程序应根据其中一列中设置的特定值对其行进行颜色编码。我使用 QSqlRelationalTableModel
和 QSqlRelationalDelegate
;因为,应该确定颜色的值是外键。
为什么不能像下面这样简单呢?有什么想法吗?
model->setData( model->index( index.row(), index.column() ),
QBrush(Qt::red),
Qt::BackgroundRole );
您应该覆盖 QSqlRelationalTableModel 的数据函数,当您获得 Qt::BackgroundRole 角色时,根据您的情况进行过滤,return 适当的 QBrush,在以下示例中按外部字段过滤并检查它等于 Lima:
示例:
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);
}
输出:
可以找到完整的示例 here。