weixin_44290011
唯有爱与梦想不可辜负
采纳率100%
2019-08-01 14:50

关于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);
}
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • weixin_44290011 唯有爱与梦想不可辜负 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();
    }
    
    点赞 评论 复制链接分享
  • qq_31762199 豆丷 2年前

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

    点赞 评论 复制链接分享