Как сделать перенос текста в ячейке, если не влезает в ширину столбца с помощью в qtableView?
Ни как не могу сделать перенос. Уже использую Delegate, но не получилось. Что сделал:
model = new QSqlTableModel(this,db);
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->setTable("TableEventBalancer");
model->select();
TableViewColumnDelegate *tableviewcolumnDelegate;
tableviewcolumnDelegate = new TableViewColumnDelegate;
ui->tableView->setItemDelegate(tableviewcolumnDelegate);
ui->tableView->setModel(model);
ui->tableView->setWordWrap(true);
ui->tableView->setTextElideMode(Qt::ElideNone);
int id = QFontDatabase::addApplicationFont("/usr/share/fonts/dejavu/DejaVuSansMono.ttf");
QFont font = QFont(QFontDatabase::applicationFontFamilies(id).first());
font.setPointSize(12);
ui->tableView->setFont(font);
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);
ui->tableView->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents);
model->setHeaderData(model->fieldIndex("number"), Qt::Horizontal, QString::fromLocal8Bit("ID"));
model->setHeaderData(model->fieldIndex("_date"), Qt::Horizontal, QString::fromLocal8Bit("Дата"));
model->setHeaderData(model->fieldIndex("text"), Qt::Horizontal, QString::fromLocal8Bit("Событие"));
Делегейт:
#include <QStyledItemDelegate>
#include <QPainter>
#include <QApplication>
#include <QDebug>
class TableViewColumnDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
explicit TableViewColumnDelegate(QObject *parent = 0);
void paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const;
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
QSize iconSize;
int padding;
signals:
public slots:
};
#include "tableviewcolumndelegate.h"
TableViewColumnDelegate::TableViewColumnDelegate(QObject *parent) : QStyledItemDelegate(parent)
{
iconSize = QSize(100, 40);
padding = 5;
}
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(0).toString();
qDebug() << "Text" << Text;
QString Text1 = index.data().toString();
qDebug() <<"Text1"<< Text1;
QFont Font = QApplication::font();
QFontMetrics Fm(Font);
QRect Rect = Fm.boundingRect(option.rect.left() + iconSize.width(), option.rect.top() + padding,
option.rect.width() - iconSize.width(), 0,
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() - iconSize.width(), 0,
Qt::AlignLeft|Qt::AlignTop|Qt::TextWordWrap,
Text);
QSize size(option.rect.width(), Rect.height() + 3*padding);
if(size.height()<iconSize.height())
size.setHeight(iconSize.height());
return size;
}
Получил, что время не вписалось в столбец и перенос не заработал.