在使用QListView或者QListWidget时,如果选中其item,会发现边框会出现虚线框,这并不美观!所以,我们需要去掉选中后的虚线框。在查阅各路大神的实现方式后,总结了有三种方法可以去除虚线框。
1、通过qss实现
LoginWindow QListView#listview_users:focus{
outline: 0px;
}
2、针对性设置无焦点
ui->listview_users->setFocusPolicy(Qt::NoFocus);
3、重写 drawPrimitive
#ifndef NOFOCUSRECTSTYLE_H
#define NOFOCUSRECTSTYLE_H
#include <QProxyStyle>
class NoFocusRectStyle : public QProxyStyle
{
public:
NoFocusRectStyle(QStyle *baseStyle) : QProxyStyle(baseStyle) {}
void drawPrimitive(PrimitiveElement element,
const QStyleOption *option,
QPainter *painter,
const QWidget *widget = 0) const
{
if (element == QStyle::PE_FrameFocusRect)
{
return;//不绘制虚线框
}
QProxyStyle::drawPrimitive(element, option, painter, widget);
}
};
#endif // NOFOCUSRECTSTYLE_H
// 使用方法
#include "widget.h"
#include <QApplication>
#include "nofocusrectstyle.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
NoFocusRectStyle *style = new NoFocusRectStyle(a.style());
a.setStyle(style);
Widget w;
w.show();
return a.exec();
}