#include #include #include #include #include #include class WordWrapItemDelegate final : public QStyledItemDelegate { public: WordWrapItemDelegate( QTreeView * parent = nullptr ) : QStyledItemDelegate( parent ) , m_parent( parent ) { } QSize sizeHint( const QStyleOptionViewItem & option, const QModelIndex & index ) const override { return option.fontMetrics.boundingRect( QRect( 0, 0, m_parent->header()->sectionSize( index.column() ), 0 ), Qt::AlignLeft | Qt::TextWordWrap, index.data( Qt::DisplayRole ).toString() ).size(); } void paint( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const override { QStyledItemDelegate::paint( painter, option, QModelIndex() ); painter->drawText( option.rect, Qt::AlignLeft | Qt::TextWordWrap | Qt::AlignVCenter, index.data( Qt::DisplayRole ).toString() ); } private: QTreeView * m_parent; }; int main( int argc, char ** argv ) { QApplication app( argc, argv ); QStringListModel m; m.setStringList( QStringList() << "QWERTY QWERTY QWERTY QWERTY QWERTY QWERTY" << "ASDFG ASDFG ASDFG ASDFG ASDFG ASDFG" << "ZXCVB ZXCVB ZXCVB ZXCVB ZXCVB ZXCVB" ); QTreeView v; v.resize( 150, 200 ); v.setRootIsDecorated( false ); v.setSortingEnabled( true ); v.setSelectionMode( QAbstractItemView::ExtendedSelection ); v.setSelectionBehavior( QAbstractItemView::SelectRows ); v.setWordWrap( true ); v.setDragDropMode( QAbstractItemView::DragOnly ); v.setAllColumnsShowFocus( true ); v.show(); v.setModel( &m ); WordWrapItemDelegate d( &v ); v.setItemDelegate( &d ); return QApplication::exec(); }