Наследование модели :: Cетевой уголок Majestio

Наследование модели


Для манипуляции с отображением модели переопределяется метод data:

QVariant MyModel::data(const QModelIndex &index, int role) const  {
  // получаем номера строки и столбца
  int Row = index.row();
  int Col = index.column();
  // отладочные сообщения, если метод вызван
  qDebug() << QString("row %1, col %2, role %3").arg(Row).arg(Col).arg(role);
  // значение из модели-родителя, тут можно использовать 
  // Если использовать Qt::DisplayRole - можно прочесть данные
  QVariant Value = QSqlQueryModel::data(index, role);
  // Альтернативный вариант (проверить!)
  QString Data = record(Row).value(Col).toString();
  switch(role) {
    case Qt::DisplayRole:
      if (Row == 0 && Col == 1) return QString("<--left");
      if (Row == 1 && Col == 1) return QString("right-->");
      return QString("Row %1, Column %2").arg(Row+1).arg(Col+1);
      break;
    case Qt::FontRole:
      if (Row == 0 && Col == 0) {  //изменяем шрифт только для ячейки (0,0)
        QFont boldFont;
        boldFont.setBold(true);
        return boldFont;
      }
      break;
    case Qt::BackgroundRole:
      if (Row == 1 && Col == 2)  {  // изменяем фон только для ячейки (1,2)
        QBrush redBackground(Qt::red);
        return redBackground;
      }
      break;
    case Qt::ForegroundRole:
      if (Row == 2 && Col == 2)  {  // изменяем цвет шрифта только для ячейки (2,2)
        return QColor(Qt::red);
      }
      break;
     case Qt::TextAlignmentRole:
       if (Row == 1 && Col == 1) {  // изменяем выравнивание только для ячейки (1,1)
         return Qt::AlignRight + Qt::AlignVCenter;
       }
       break;
     case Qt::CheckStateRole:
       if (Row == 1 && Col == 0) {  // добавляем чекбокс для ячейки (1,0)
         return Qt::Checked;
       }
     }
  }
  return QVariant(); // или Value, если оставили роль, переданную аргументом
}

Подробнее о ролях можно прочесть в статье "О типах ролей в моделях"

Рейтинг: 0/5 - 0 голосов