Реклама

Qt/C++ - Урок 039. Как закрасить строку в QSqlTableModel по значению в столбце

TutorialQtQSqlTableModel, Qt, paint128

В уроке по работе с QSqlTableModel было подробно рассмотрено отображение таблицы данных из базы данных SQL . Но в связи с вопросом от одного из читателей, делаю небольшое дополнение к это примеру.

Вопрос состоял в том, как закрасить всю строку в зависимости от значения в одной из колонок. В примере по работе с QSqlTableModel производилось добавление в базу данных строк с датой, временем, псевдослучайным числом и сообщением об этом псевдослучайном числе. В связи с этим в качестве подопытных строк были выбраны строки, где псевдослучайное число равняется 41.

Для этого необходимо наследоваться от класса QSqlTableModel и переопределить метод QSqlTableModel::data(). После чего использовать в качестве модели данных новый класс наследник.

tablemodel.h

#ifndef TABLEMODEL_H
#define TABLEMODEL_H

#include <QObject>
#include <QSqlTableModel>

class TableModel : public QSqlTableModel
{
    Q_OBJECT
public:
    explicit TableModel(QObject *parent = 0);
    QVariant data(const QModelIndex &idx, int role) const;

signals:

public slots:
};

#endif // TABLEMODEL_H

tablemodel.cpp

Отмечу, что в первоначальном примере столбец 0 не отображается в таблице, поэтому выбираем получение данных из колонки 3, а не из колонки 2. Получение данных производится вызовом метода базового класса.

#include "tablemodel.h"
#include <QColor>

TableModel::TableModel(QObject *parent) : QSqlTableModel(parent)
{

}

QVariant TableModel::data(const QModelIndex &idx, int role) const
{
    if(role == Qt::BackgroundColorRole){
        if(QSqlTableModel::data(this->index(idx.row(), 3)).toInt() == 41){
            return QColor(Qt::red);
        }
    } else if(role == Qt::DisplayRole){
        return QSqlTableModel::data(idx);
    }
    return QVariant();
}

Итог

В результате получилось приложение, в котором отображается таблица, в которой закрашены красным цветом строки, где присутствует псевдослучайное число, равное 41. Причём подобный подход справедлив для всех классов, наследованных соответственно от QAbstractItemModel. То есть для QSqlQueryModel , QSqlRelationalTableModel и т.д.

Архив с примером урока из под ОС Ubuntu - внимательно проверяйте, по какому пути создаётся файл базы данных в класса DataBase.

@EVILEG 18 ноября 2015 г. 21:14

Реклама

Реклама

Комментарии

Комментарии

Только авторизованные пользователи могут оставлять комментарии.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь

Реклама

Реклама