关于QListView图片模式选中后存在类似前景的东西,请教大神我该如何去除?

具体问题

图片说明


使用QListView的图片模式做了一个图片显示列表,最后设置样式的时候发现选中后图片表面有一层颜色,背景什么的都设置了,也无法去除他,有没大佬知道如何去除这层类似前景的颜色?谢谢!困扰了好久都没有去除掉。


以下是设置QListView相关C++代码

    m_impl->icoView = new QListView(this);

    m_impl->icoView->setObjectName(QStringLiteral("ImageCameraicoView"));

    m_impl->image = new ImageModelAri(m_impl->icoView);
    m_impl->icoView->setModel(m_impl->image);
    //略缩图模式
    m_impl->icoView->setViewMode(QListView::IconMode);
    //设置图片尺寸
    m_impl->icoView->setIconSize(m_impl->image->sizeHint());

    m_impl->icoView->setFlow(QListView::LeftToRight);
    m_impl->icoView->setFocusPolicy(Qt::NoFocus);//去掉选中虚线框

    //设置当宽度超限时 出现滚动条,不要往下挤
    m_impl->icoView->setWrapping(false);
    //条目间距
    m_impl->icoView->setSpacing(10);
    m_impl->icoView->setEditTriggers(QAbstractItemView::NoEditTriggers);
    m_impl->icoView->setSelectionMode(QAbstractItemView::ExtendedSelection);


相关QSS

QListView#ImageCameraicoView
{
    /* 背景色 */
    background-color:transparent;
    border:none;
}
QListView#ImageCameraicoView::item:selected
{
    color: transparent;
    background: transparent;
    border: 2px solid rgb(88,154,171);
}
QListView#ImageCameraicoView::item:hover
{
    color: transparent;
    background-color:transparent;
    border: 2px solid rgb(88,154,171);
}
c++

2个回答

好吧,最后公司大佬解决了这个问题,我也学到了
使用代理

void ImageCollectionDelegate::paint(QPainter *painter,
                                          const QStyleOptionViewItem &option,
                                          const QModelIndex &index) const
{
    if (!index.isValid())
    {
        QStyledItemDelegate::paint(painter, option, index);
        return;
    }
    painter->save();
    QVariant var = index.data(Qt::UserRole+1);
    QString icoFullPath = var.toString();

    QRectF iconRect = option.rect;

    // 绘制icon
    painter->drawImage(iconRect, QImage(icoFullPath));

    auto pen = painter->pen();
    pen.setColor(QColor(88, 154, 171));
    painter->setBrush(Qt::NoBrush);

    // 鼠标悬停或者选中时改变背景色
    // 内缩像素不一样是实际绘制时的显示问题
    if (option.state.testFlag(QStyle::State_Selected))
    {
        iconRect.adjust(1, 1, -1, -1);
        pen.setWidthF(2.0);
        painter->setPen(pen);
        painter->drawRect(iconRect);
    }
    else if (option.state.testFlag(QStyle::State_MouseOver))
    {
        iconRect.adjust(0, 0, -1, -1);
        painter->setPen(pen);
        painter->drawRect(iconRect);
    }
    painter->restore();
}

你设置的是背景颜色,这种选中变深的效果应该是在边界里,
在stylesheet里叫 border-color
我之前把一个按钮的边界设置成一个图片后就没有选中变深的效果了,listview应该也同理

weixin_44290011
唯有爱与梦想不可辜负 谢谢你的回答,我试了下,还是不行
8 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问