Я переопределил 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();
}
Я приложил скриншот проблемы, вторая половина должна быть жирным шрифтом
Вы забыли добавить свой extendedQItemDelegate
к QTreeView
/QTreeWidget
объект через setItemDelegate
функция-член.
В качестве примера:
QTreeWidget* tree_view = ...;
extendedQItemDelegate* extended_item_delegate = ...;
tree_view->setItemDelegate(extended_item_delegate);
Вам нужно сделать копию 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
теги.)