В переопределенной функции рисования QItemDelegate setFont не работает

Я переопределил paint() функция для QTreeWidgetЯ хочу показать данные второго столбца жирным шрифтом, но это не работает.

Как я могу это исправить?

void extendedQItemDelegate::paint(QPainter *painter,
const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
const QString txt = index.data().toString();
painter->save();
QFont painterFont;
if (index.column() == 1) {
painterFont.setBold(true);
painterFont.setStretch(20);
}
painter->setFont(painterFont);
drawDisplay(painter, option, rect, txt);
painter->restore();
}

Я приложил скриншот проблемы, вторая половина должна быть жирным шрифтом

Скриншот

0

Решение

Вы забыли добавить свой extendedQItemDelegate к QTreeView/QTreeWidget объект через setItemDelegate функция-член.

В качестве примера:

QTreeWidget* tree_view = ...;
extendedQItemDelegate* extended_item_delegate = ...;
tree_view->setItemDelegate(extended_item_delegate);
0

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

Вам нужно сделать копию const QStyleOptionViewItem &option, применить изменения шрифта к этой копии, а затем рисовать, используя вашу копию вместо оригинала option перешел в функцию.

void extendedQItemDelegate::paint(QPainter *painter,
const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
const QString txt = index.data().toString();
painter->save();
QStyleOptionViewItem optCopy = option;     // make a copy to modify
if (index.column() == 1) {
optCopy.font.setBold(true);            // set attributes on the copy
optCopy.font.setStretch(20);
}
drawDisplay(painter, optCopy, rect, txt);  // use copy to paint with
painter->restore();
}

(Просто понял, что это старый вопрос, но он выскочил на вершину qt теги.)

0

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