在QItemDelegate的重新实现的绘制功能中,setFont不起作用

时间:2014-03-15 08:48:26

标签: c++ qt qtreeview qitemdelegate

我已为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();
}
我附上了问题的截屏,下半部分应该是粗体

screen shot

2 个答案:

答案 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标签的顶部。)