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

259
21 июня 2017, 01:16

Я нашел в интернете переопределенный класс tablemodel.h:

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

tablemodel.cpp

#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(), 0)).toInt() == 6){
            return QColor(Qt::red);
        }
    } else if(role == Qt::DisplayRole){
        return QSqlTableModel::data(idx);
    }
    return QVariant();
}

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

Answer 1

У вас отсутствует обработка Qt::EditRole. Возможно причина в этом

READ ALSO
Не работают манипуляторы вывода потока ostream

Не работают манипуляторы вывода потока ostream

Не работает такой простейший вывод:

262
Странное падение программы [требует правки]

Странное падение программы [требует правки]

Добрый день! Наблюдаю странное падение программы на 20-30 раз запуска, а иногда может и совсем не упастьПодцепив отладчик вчера сидел целый...

186
Ошибка в сортировке массива слов C++

Ошибка в сортировке массива слов C++

Имеется массив char с 14k русских словНеобходимо отсортировать этот массив по алфавиту

235
почтовый клиент pop3 с помощью сокетов

почтовый клиент pop3 с помощью сокетов

Доброго времени суток! Нужно было написать почтовый клиент на сокетах, использующего протокол POP3 для чтения сообщенийНемного погуглив, наклакал...

444