Qtreeview彩色边框

时间:2015-08-25 12:40:30

标签: c++ qt qtreeview

我有一个使用AbstractItemModel填充的QTreeView。我想通过显示基于内部状态的红色边框来突出显示一些条目。

目前我的代码如下:

QVariant MyAbstractItemModel::data(QModelIndex const& index, int role)
...
else if (Qt::BackgroundRole == role)
{
    if (someMethod(index))
        return QColor(255,0,0);
    return QVariant();
} ...

显然,此代码将背景颜色设置为红色而不是边框​​颜色。

如何设置项目的边框颜色?

1 个答案:

答案 0 :(得分:0)

非常感谢SaZ,解决方案是QStyledItemDelegate。

我的代码现在看起来像这样:

QVariant MyAbstractItemModel::data(QmodelIndex const&, int role)
{
    ...
    else if (Qt::UserRole == role)
    {
        return someMethod(index);
    }
    ...
}

我有一位代表:

class MyDelegate
  : public QStyledItemDelegate
{
  virtual void paint(QPainter* painter, QStyleOptionViewItem const& option, QModelIndex const& index) const override
  {
    QStyledItemDelegate::paint(painter, option, index);
    QStyleOptionViewItemV4 opt = option;
    initStyleOption(&opt, index);
    if (index.data(Qt::UserRole))
    {
      QRect rect(opt.rect.x(), opt.rect.y(), opt.rect.width(), opt.rect.height());
      painter.save();
      painter.setPen(Qt::red);
      painter.drawRect(rect);
      painter->restore();
    }
  } 
}
...
MyDelegate _delegate;
_ui.myTreeView->setItemDelegate(&_delegate);