QItemDelegate: повернуть текст на 90 градусов

У меня есть диапазон ячеек (1 столбец, 5 строк), где я хотел бы отображать текст под углом 90 градусов. Я знаю, что мне нужно будет изменить размер геометрии, но пока я не могу даже вывести текст. В среднем ряду я делаю это в своем подклассе QItemDelegate::paint()

QString data = "String";
painter->rotate( 90 );
painter->drawText( opt.rect, Qt::AlignLeft, data );

В основном я ничего не печатаю в этом случае. Несколько других вопросов привели меня к такому коду. Я что-то упускаю?


person kiss-o-matic    schedule 08.10.2015    source источник
comment
это должно помочь: stackoverflow.com/a/22634541/1387438   -  person Marek R    schedule 08.10.2015
comment
Похоже, это для QHeaderView. Мне нужно повернуть текст в реальном представлении - в ячейках. Я предполагал, что смогу сделать это в переопределенной функции paint().   -  person kiss-o-matic    schedule 08.10.2015


Ответы (1)


Шаблон такой же, как в ссылке, которую я разместил в комментарии. Это должно выглядеть примерно так. Я мог перепутать какой-то знак или сделать опечатку.

#include "customitemdelegate.h"
#include <QPainter>

CustomItemDelegate::CustomItemDelegate(QObject *parent)
    : QItemDelegate(parent)
{
}

void CustomItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    QStyleOptionViewItem newOption(option);
    QTransform transform(QTransform::fromTranslate(-option.rect.center().x(),
                                                   -option.rect.center().y()));
    transform.rotate(90);
    painter->setTransform(transform);
    transform=transform.inverted();
    newOption.rect=transform.mapRect(newOption.rect);
    QItemDelegate::paint(painter, newOption, index);

    // restore state of painter
    painter->setTransform(transform);
}

QSize CustomItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    return QItemDelegate::sizeHint(option, index).transposed();
}
person Marek R    schedule 08.10.2015
comment
Спасибо за пример. Тем не менее, все еще получаю пустое место. Возможно, стоит отметить, что я создал подкласс QStyledItemDelegate, хотя я не думаю, что это будет иметь значение. Немного повозится. - person kiss-o-matic; 08.10.2015
comment
Обновление содержит точное содержимое файла cpp, который я использовал для проверки этого решения. Это работает отлично. QTransform::fromTranslate часть можно удалить, и она все равно будет работать. - person Marek R; 09.10.2015
comment
Хорошо, это сильно сказано. Существует проблема с границами ячеек, и это не может быть просто исправлено. - person Marek R; 09.10.2015
comment
покопайтесь в коде Qt, это можно довольно легко исправить: ="nofollow noreferrer">github.com/RSATom/Qt/blob/ - person Marek R; 09.10.2015
comment
Я не вижу никакой разницы. Единственное несоответствие, которое я вижу (и я извиняюсь, поскольку это ошибка в исходном сообщении), заключается в том, что я наследую QStyledItemDelegate, а не QItemDelegate. Хотя я не думаю, что здесь это что-то изменит. - person kiss-o-matic; 09.10.2015
comment
Я попробую этот код с ванильным QItemDelegate и более простой моделью/представлением и т. д. Сейчас я использую тот, который я подклассифицировал и сильно изменил. - person kiss-o-matic; 09.10.2015