QSqlRelationalTableModel QTableView 着色行

Posted

技术标签:

【中文标题】QSqlRelationalTableModel QTableView 着色行【英文标题】:QSqlRelationalTableModel QTableView colorizing rows 【发布时间】:2017-06-28 06:21:40 【问题描述】:

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

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

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

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

【问题讨论】:

相反:您模型的 data() 函数应该返回 Qt::red 以获得特定值。 【参考方案1】:

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

例子:

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找到。

【讨论】:

太棒了!非常感谢,稍加调整就可以满足我的需要!

以上是关于QSqlRelationalTableModel QTableView 着色行的主要内容,如果未能解决你的问题,请参考以下文章

QSqlRelationalTableModel的Select语句会改变列的名字

PyQt5数据库开发2 5.2 QSqlRelationalTableModel

在QT下使用SQL的问题:QSqlRelationalTableModel类的setFilter查找,我希望他没有查找到的时候返回信息

QSortFilterProxyModel headerData

QSortFilterProxyModel 仅对获取的数据进行排序

Qt操作SQLite数据库