在 Windows 中,控件得到焦点时会显示一个虚线框,很多时候觉得不好看,有 2 中方式去掉这个虚线框:
- 使用 StyleSheet
- 继承 QProxyStyle
使用 StyleSheet
1 2 3
| QWidget:focus { outline: none; }
|
继承 QProxyStyle
继承 QProxyStyle,QStyle::PE_FrameFocusRect 时不绘制虚线框,main() 函数里调用 QApplication::setStyle() 使用新的样式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
#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
|
当 element == QStyle::PE_FrameFocusRect 时,直接返回,不绘制虚线框。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
#include "Widget.h" #include "NoFocusRectStyle.h" #include <QApplication>
int main(int argc, char *argv[]) { QApplication app(argc, argv); NoFocusRectStyle *style = new NoFocusRectStyle(app.style()); app.setStyle(style);
Widget w; w.show();
return app.exec(); }
|
在 main() 函数中调用 app.setStyle(style) 使用我们上面自定义的 NoFocusRectStyle 就可以把虚线框去掉了。