Возникла такая же задача.
Похоже перемещение колонок единственное решение (пытался сделать через указание колонки с деревом в методах rowCount и parent).
Но при перемещении колонок неверно работает выделение (см. скриншот)
Как заставить выделять строку полностью?
Пытался через делегат:
void MyDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if ((index.column()==0) && ( option.state & QStyle::State_Selected ))
{
QStyleOptionViewItemV4 opt = option;
initStyleOption(&opt, index);
const QWidget *widget = opt.widget;
opt.rect.setLeft(((QTreeView*)widget)->columnViewportPosition(0));
QStyle *style = widget ? widget->style() : QApplication::style();
style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, widget);
} else QStyledItemDelegate::paint(painter, option, index);
}
Но в этом случае и текст отображается в начале колонки, поверх треугольника, да и стык видно (см. скриншот 2)