QpushButton避免焦点虚框

来源:互联网 发布:没有朋友知乎 编辑:程序博客网 时间:2024/05/03 07:47

QpushButton避免焦点虚框

QPushButton是一个推动按钮,通常创建一个按钮后,我们会点击按钮,以响应对应的动作。在一些比较少的情况下,我们会给按钮设置特别样式的背景,使按钮看起来具有自己的风格。这时候我们使用样式表(stylesheet)来完成我们的背景图片设置,同时我们好药设置一些其他标志,如flat,palette等。Flat表示按钮的边框,设置为真,则边框不显示,默认为假,边缘框是显示的。Palette则是设置字体颜色,边缘效应等,具体参Qt手册。       好了,我们用下面的代码设置了按钮的背景图片:QPalette  palette;       QBrush  brush(QColor(255,255,255));       palette.setBrush(QPalette::ButtonText,brush);       QBrush  brushbutton(QColor(0,0,0,0));      //设置为透明       palette.setBrush(QPalette::Shadow,brushbutton);       palette.setBrush(QPalette::Button, brushbutton);       QFont font;    font.setFamily(QString::fromUtf8("Sans Serif"));    font.setPointSize(20);    font.setWeight(50);       QPushButton  Button(tr("delete this record!"));       Button.setPalette(palette);       Button.setFont(font);      Button.setGeometry(10,10,290,54);       deleteButton.setFlat(true);       setStyleSheet("background-image:url(:images/backgroud.png);"); 到这里,按钮的背景已设置完成,但是,当我们用setFocus()时,也就是焦点转到这个按钮上时,会出现一个虚框(焦点框)。这个虚框有时候是很令人讨厌的。去掉它的方法有两个,一个是设置焦点策略为无焦点,代码如下:       setFocusPolicy ( Qt::NoFocus );但是这样就无法接受键盘事件了,为了能接受键盘事件,我们必须另想方法。因为这个虚框是在Qstyle中实现的,我们就得重新实现QStyle,然后设置按钮的style.class Style : public QWindowsStyle{public:        Style();       ~Style();       void drawControl ( ControlElement element, const QStyleOption * option,QPainter * painter, const QWidget * widget = 0 ) const{                    if(element == CE_PushButton) {        const QStyleOptionButton *b=qstyleoption_cast<const QStyleOptionButton *>(option);                     QStyleOptionButton *btn = (QStyleOptionButton *)b;                      if (btn) {                              if (btn->state & State_HasFocus) {                  btn->state = btn->state ^ State_HasFocus;                                           }                      }            QWindowsStyle::drawControl(element, btn, painter, widget);                                    } else {         QWindowsStyle::drawControl(element, option, painter, widget);               }        }}; 然后在设置按钮的stylesetStyle(new  Style()); 完成这些工作之后,那个讨厌的虚框还是存在,通过验证后,发现是因为使用了setStyleSheet()造成了虚框的重新绘制。怎么办,这么行不通就换思路,setStyleSheet是用来设置背景图片的,那么我们得找出设置背景图片的另一种方法。前面用到了palette,这个可以设置按钮的背景图片,再试试:QPixmap  pixmap=QPixmap("/etc/IMP/MT/callagent/images/blackbutton.png");palette.setBrush(QPalette::Button,QBrush(pixmap));按钮上什么也没有啊,再看文档,查网络。最后发现了一个最重要的细节没有设置。那就是自动填充背景。setAutoFillBackground(true);至此,无虚框的按钮终于出现了。还有就是运用样式表  setStyleSheet("QPushButton:focus{padding: -20;}"  根据个人需求改变数值的大小。实际的探寻过程要比这里描述的艰难很多,当一个问题在很长时间内解决不了的话,首先在心里上就给人造成了一些影响,有了挫败感,有了放弃的念头,但是自己必须明白,不能放弃,坚信问题一定能解决,所以在效率极低的情况下继续着探寻,当“幸运”降临自己时,得到了自己希望的结果,却在感谢上天的恩赐。其实这个“幸运”是自己辛勤汗水的结晶。这个时候探寻带来的喜悦冲走了探寻过程中的焦躁,充实了我继续探寻的信心和勇气。
[喝小酒的网摘]http://blog.hehehehehe.cn/a/9749.htm
原文:http://liufiabo.blog.163.com/blog/static/1126637832009916114443120/[喝小酒的网摘]http://blog.hehehehehe.cn/a/9749.htm
0 0