我已为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 :(得分:0)
您忘记通过setItemDelegate
会员功能将extendedQItemDelegate
添加到QTreeView
/ QTreeWidget
对象。
举个例子:
QTreeWidget* tree_view = ...;
extendedQItemDelegate* extended_item_delegate = ...;
tree_view->setItemDelegate(extended_item_delegate);
答案 1 :(得分: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
标签的顶部。)