QSqlRelationalTableModel QTableView раскрашивание строк

Как правильно кодировать строки в цвете? QTableView?

Я разрабатываю приложение для работы с электронными таблицами, которое должно кодировать строки в соответствии с определенным значением, заданным в одном из столбцов. я использую QSqlRelationalTableModel а также QSqlRelationalDelegate; потому что значение, которое должно определять цвет, является внешним ключом.

Почему это не может быть так просто, как показано ниже? Есть идеи?

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

2

Решение

Вам следует перезаписать функцию данных 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);
}

Выход:

введите описание изображения здесь

Полный пример можно найти Вот.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]