kozura
@kozura

Доп. параметр для Item'ов в QTableView?

Необходимо с определенной периодичностью анализировать значение item'a и в соответствии с изменением значения, менять свойства BackgroungRole.
  • Вопрос задан
  • 4189 просмотров
Пригласить эксперта
Ответы на вопрос 1
@silver47
QTableView с чего данные получает. Если от QSqlQueryModel, то нужно наследоваться от QSqlQueryModel и менять уже там. Вырезки из моей модели, приблизительно показывает как это можно сделать.
mymodel.h
class MyModel : public QSqlQueryModel{
    Q_OBJECT
public:
                            MyModel(QObject *parent = 0);
    QVariant           data(const QModelIndex &index, int role = Qt::DisplayRole) const;
};
//==== Модель Таблицы ====


mymodel.cpp
QVariant DownloadTabModel::data(const QModelIndex &index, int role) const {
    QVariant value = QSqlQueryModel::data(index, role); // получили значение определенное
                                                        // в базовом классе
    switch (role) { // в зависимости от параметра роль:
                    // Qt::DisplayRole - данные для отображения ячейки таблицы
                    // Qt::EditRole    - данные для режима редактирования
                    // Qt::TextColorRole - цвет текста
                    // Qt::TextAlignmentRole - выравнивание
                    // Qt::FontRole - параметры шрифта
                    // Qt::BackgroundColorRole - цвет фона ячейки
                    // Qt::CheckStateRole - отображение QCheckBox
                    // Qt::SizeHintRole - предпочитаемый размер ячейки

    
    case Qt::TextColorRole: // Цвет текста
//        if(index.column() == 1)
//            return qVariantFromValue(QColor(Qt::blue));
//        else
            return value;
    case Qt::BackgroundColorRole: {  // Цвет фона        
        if(index.sibling(index.row(), 0).data(Qt::DisplayRole).toString() != QObject::trUtf8("Ок")){            
            return qVariantFromValue(QColor(240, 180, 180));
        }else{
            if(QDateTime::fromString(index.sibling(index.row(), 1).data(Qt::DisplayRole).toString(), "dd.MM.yyyy hh:mm").secsTo(QDateTime::currentDateTime()) < 24 * 3600){
                return qVariantFromValue(QColor(180, 240, 180));
            }else if(QDateTime::fromString(index.sibling(index.row(), 1).data(Qt::DisplayRole).toString(), "dd.MM.yyyy hh:mm").secsTo(QDateTime::currentDateTime()) > 24 * 3600 * 30){
                return qVariantFromValue(QColor(240, 240, 180));
            }
        }
    }        
    return value;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы