K
K
kozura2014-09-22 16:28:31
Qt
kozura, 2014-09-22 16:28:31

Add. parameter for Items in QTableView?

It is necessary to analyze the value of item'a with a certain periodicity and, in accordance with the change in value, change the properties of the BackgroungRole.

Answer the question

In order to leave comments, you need to log in

1 answer(s)
S
silver47, 2014-10-23
@silver47

QTableView from which it receives data. If from QSqlQueryModel, then you need to inherit from QSqlQueryModel and change it already there. Clippings from my model show roughly how this can be done.
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;
}

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question