Чтение данных модели с помощью пользовательского QHeaderView

Я хочу установить собственный QHeaderView для поворота текста горизонтального заголовка. Я работаю с QStandarItemModel

На данный момент у меня есть это

class QHeaderViewR : public QHeaderView
{
public:
QHeaderViewR():QHeaderView(Qt::Horizontal)
{}

void paintSection(QPainter * painter, const QRect & rect, int logicalIndex) const
{
QPen pen(Qt::black);
painter->setPen(pen);
painter->translate(rect.width() * logicalIndex, (logicalIndex * -18) -18);
painter->rotate(90);
painter->drawText(rect,"header");
}
};

Я не очень понимаю, что я сделал с переводчиком. Я просто пошел методом проб и ошибок, пока он не совпал с колонками. Тем не менее, это не так идеально, и это сокращает текст без видимой причины. Что я должен сделать, чтобы текст соответствовал столбцам и не был обрезан?

«картинка несоответствия и вырезанного текста»

Другое дело, что я не хочу просто писать «заголовок» в каждом столбце. Модель, которую нужно просмотреть, имеет HorizontalHeaderItem, назначенный для каждого столбца, и я хотел бы показать эти заголовки вместо

Заранее спасибо за помощь

0

Решение

Я решил это. Просто добавил QStringList в качестве параметра конструктора и перебрал его, используя логический индекс. Это конечный результат

class QHeaderViewR : public QHeaderView
{
QStringList heads;

public:
QHeaderViewR(QStringList _heads):QHeaderView(Qt::Horizontal)
{

heads = _heads;
}

void paintSection(QPainter * painter, const QRect & rect, int logicalIndex) const
{QPen pen(Qt::black);
painter->setPen(pen);

painter->rotate(90);
painter->translate(0,-rect.width()+1);

QRect copy = rect;

copy.setWidth(rect.height());
copy.setHeight(rect.width());
copy.moveTo(0,-this->sectionPosition(logicalIndex));

if (logicalIndex == 0)
{
copy.setHeight(rect.width()-1);
}

painter->drawText(copy, " " + heads.at(logicalIndex));
painter->drawRect(copy);
}
};
0

Другие решения

Поскольку QHeaderView является только представлением, вы должны получить данные для отображения из модели.

Итак, похоже на базовая реализация в QHeaderView:

QString text = model()->headerData(logicalIndex, orientation(), Qt::DisplayRole).toString();

Чтобы установить заголовки на модели, используйте, например,

QStandardItemModel::setHorizontalHeaderLabels(const QStringList &labels)
0

По вопросам рекламы [email protected]