在 Qt 的 QListView 中为图像设置边框

Posted

技术标签:

【中文标题】在 Qt 的 QListView 中为图像设置边框【英文标题】:Set border to an image in QListView in Qt 【发布时间】:2013-08-07 10:51:44 【问题描述】:

我正在将 QPixmap 设置为 QStandardItem:

QStandardItem* item = new QStandardItem();
item->setData( pixmap, Qt::DecorationRole );

然后我执行appendRow() 并将item 添加到模型中。

我在 QListView 中显示模型中的所有像素图。 如何为 ListView 中的第一项(图像)设置细边框?

【问题讨论】:

【参考方案1】:

子类QStyledItemDelegate 并覆盖它的paint 函数。使用它为您的项目绘制边框。然后将该委托设置为您的 QListView。

例子:

void MyDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const

    if(index.row() == 0)
    
        painter->setPen(QPen(Qt::red, 2));
        painter->drawRect(option.rect.x()+1, option.rect.y(), option.rect.width()-1, option.rect.height());
    
    QStyledItemDelegate::paint(painter, option, index);

还有set the delegate for your QListView:

listView->setItemDelegate(new MyDelegate);

您不必检查绘图函数中的行。你可以set the delegate for a specific row:

listView->setItemDelegateForRow(0, new MyDelegate);

【讨论】:

以上是关于在 Qt 的 QListView 中为图像设置边框的主要内容,如果未能解决你的问题,请参考以下文章

Qt之使用QListView实现QQ登录历史列表

是否可以在 PyQt/PySide2 中为 QLineEdit 的文本制作“破碎”边框

QT学习_QListView使用

如何在opencv中为图像添加边框,边框颜色必须与图像颜色相同

为在开放层中为 angular 8 创建的图像添加边框

Qt - 如何将 QListView 项目转移到另一个 QListView?