Цель сделать автоматический перенос текста при фиксированных размерах столбцов. Начал делать и столкнулся с первой проблемой.
1.Размеры столбцов должны равняться размеру выводимой информации. А так получается что "дата время" не вписывается в столбец "Дата", а вылазят за пределы.
Что сделал:
ui->tableView->setModel(model);
ui->tableView->setItemDelegate(new TableViewColumnDelegate(this));
ui->tableView->setWordWrap(true);
ui->tableView->setTextElideMode(Qt::ElideNone);
ui->tableView->setFont(font);
[b]//ui->tableView->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents); // думал этого хватит, но оказалось нет
ui->tableView->resizeColumnToContents(0);
ui->tableView->resizeColumnToContents(1);
ui->tableView->horizontalHeader()->setResizeMode(0, QHeaderView::Fixed);
ui->tableView->horizontalHeader()->setResizeMode(1, QHeaderView::Fixed);
ui->tableView->horizontalHeader()->setResizeMode(2, QHeaderView::Stretch);[/b]
Добавил делегейт "QStyledItemDelegate":
void TableViewColumnDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if(!index.isValid())
return;
painter->save();
if (option.state & QStyle::State_Selected){
painter->fillRect(option.rect, option.palette.highlight());
}
QString Text = index.data().toString();
qDebug() << "Text" << Text;
QFont Font = QApplication::font();
QFontMetrics Fm(Font);
QRect Rect = Fm.boundingRect(option.rect.left(), option.rect.top() ,
option.rect.width(), option.rect.height(),
Qt::AlignLeft|Qt::AlignTop|Qt::TextWordWrap,
Text);
painter->setPen(Qt::black);
painter->setFont(Font);
painter->drawText(Rect, Qt::AlignLeft|Qt::AlignTop|Qt::TextWordWrap, Text);
painter->restore();
}
QSize TableViewColumnDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if(!index.isValid())
return QSize();
QString Text = index.data().toString();
QFont Font = QApplication::font();
QFontMetrics Fm(Font);
QRect Rect = Fm.boundingRect(0, 0, option.rect.width(), 0,
Qt::AlignLeft|Qt::AlignTop|Qt::TextWordWrap,
Text);
QSize size(option.rect.width(), Rect.height());
return size;
}
Получил: