2017-06-28 37 views
1

QTableView中对行进行着色代码的正确方法是什么?QSqlRelationalTableModel QTableView着色行

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

为什么不能像以下那样简单?有任何想法吗?

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

正好相反:你的模型的'data()'函数应该返回'Qt :: red'来获取特定的值。 – vahancho

回答

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

输出:

enter image description here

完整的例子可以发现here

+0

太棒了!非常感谢,通过一个小小的调整,它完全符合我的需求! – Tylnesh