唯有爱与梦想不可辜负 2019-08-01 14:50 采纳率: 50%
浏览 381
已采纳

关于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条回答

  • 关注

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

    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();
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常
  • ¥15 关于风控系统,如何去选择
  • ¥15 这款软件是什么?需要能满足我的需求
  • ¥15 SpringSecurityOauth2登陆前后request不一致
  • ¥15 禅道二次开发编辑版本,上传不了发行包