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, чтобы иметь полный контроль над внешним видом и поведением элемента представления.
Делегат может быть настроен для представления одним из трех способов:
- для всего вида (т.е. для всех элементов модели) с помощью метода setItemDelegate
- для определенного столбца с помощью метода setItemDelegateForColumn
- для конкретной строки с помощью метода 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);
}