使用QListView的图片模式做了一个图片显示列表,最后设置样式的时候发现选中后图片表面有一层颜色,背景什么的都设置了,也无法去除他,有没大佬知道如何去除这层类似前景的颜色?谢谢!困扰了好久都没有去除掉。
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);
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);
}
好吧,最后公司大佬解决了这个问题,我也学到了
使用代理
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应该也同理