QTableView форматировать отдельные строки и столбцы

Может быть, то, что я собираюсь спросить, является настолько простым, что я где-то пропустил, но я гуглю все виды вещей, и я не смог найти ответ. У меня есть следующее табличное представление, подача из таблицы SQLite:

  body = new QSqlTableModel(parent,data->m_db);
  body->setTable("C"+QString::number(markTime.toSecsSinceEpoch()));
  body->select();
  ui->bodyView->setModel(body);
  ui->bodyView->sortByColumn(0,Qt::AscendingOrder);
  ui->bodyView->setColumnWidth(0,30);
  ui->bodyView->setColumnWidth(1,80);
  for(int x=2;x<ui->columns->maximum()+2;x++) ui->bodyView->setColumnWidth(x,40);
  ui->bodyView->setEditTriggers(QAbstractItemView::NoEditTriggers);
  ui->bodyView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
  ui->bodyView->setAlternatingRowColors(true);
  ui->bodyView->show();

Далее в программе я добавляю данные в таблицу для отображения. Это работает без проблем. У меня такой вопрос: как я могу получить доступ к отдельным строкам для форматирования строки, я хотел бы изменить размер шрифта, отформатировать дисплей так, чтобы отображалось выровненное число и сделать его жирным, но только для конкретной строки. Спасибо за помощь.

1 ответ

Решение

Предложенное Qt решение для настройки деталей рендеринга (и редактирования) отдельных элементов представления осуществляется через делегатов. Уровень настройки зависит от вашего варианта использования: вы можете внести некоторые незначительные изменения, например, изменить шрифт или нарисовать что-то совершенно особенное, как показано в примере Star Delegate.

По сути, есть два варианта продолжения работы с пользовательским делегатом: либо вы подкласс QStyledItemDelegate (или его базовый класс QItemDelegate, если вам нужно рисовать элементы типов данных Qt в некоторой степени специально), и изменить некоторые конкретные детали, представляющие интерес для вас, оставив остальную часть базовому. класс или вы подкласс QAbstractItemDelegate, чтобы иметь полный контроль над внешним видом и поведением элемента представления.

Делегат может быть настроен для представления одним из трех способов:

  1. для всего вида (т.е. для всех элементов модели) с помощью метода setItemDelegate
  2. для определенного столбца с помощью метода setItemDelegateForColumn
  3. для конкретной строки с помощью метода setItemDelegateForRow

Для примера, вот как вы можете указать немного больший размер шрифта для рендеринга элемента:

class CustomDelegate: public QStyledItemDelegate
{
public:
    virtual void paint(QPainter *painter, const QStyleOptionViewItem &option,
                         const QModelIndex &index) const Q_DECL_OVERRIDE;
};

void CustomDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
                         const QModelIndex &index) const
{
    if (!index.isValid()) {
        return;
    }

    QFont font = option.font;
    font.setPointSize(font.pointSize() + 1);

    QStyleOptionViewItem localOption(option);
    localOption.font = font;
    QStyledItemDelegate::paint(painter, localOption, index);
}
Другие вопросы по тегам