我有一个使用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();
} ...
显然,此代码将背景颜色设置为红色而不是边框颜色。
如何设置项目的边框颜色?
答案 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);