• 6628阅读
  • 1回复

[讨论]关于QListWidgetItem在选中时文字周围的虚线框 [复制链接]

上一主题 下一主题
离线hfqs
 
只看楼主 倒序阅读 楼主  发表于: 2013-02-02
请教一下各位大神,QListWidgetItem在选中时文字周围的虚线框怎么能把它去掉?(如下图)






现在选中的是333333333这一行,怎么能把包围着文字的虚线框去除掉?
离线shiziyang

只看该作者 1楼 发表于: 2013-02-05

.h
#ifndef CCLEANLOOKSSTYLE_H
#define CCLEANLOOKSSTYLE_H


#include <QCleanlooksStyle>
#include "control_global.h"


class CONTROLSHARED_EXPORT CCleanlooksStyle : public QCleanlooksStyle
{
    Q_OBJECT
public:
    CCleanlooksStyle();


    void drawPrimitive(PrimitiveElement element, const QStyleOption *option,
                       QPainter *painter, const QWidget *widget = 0) const;
};


#endif // CCLEANLOOKSSTYLE_H


.cpp

#include "ccleanlooksstyle.h"


CCleanlooksStyle::CCleanlooksStyle()
{
}


void CCleanlooksStyle::drawPrimitive(PrimitiveElement element, const QStyleOption *option,
                                QPainter *painter, const QWidget *widget) const
{
    switch (element)
    {
    case PE_FrameFocusRect:
        {
            break;
        }
    default:
        {
            QCleanlooksStyle::drawPrimitive(element, option, painter, widget);
            break;
        }
    }
    return;
}


像这样把你用的style作为基类派生一个新的style,然后专门在PE_FrameRect这里处理一下,最后把你要的控件设置该style。
注意这样写对应所有聚焦的虚线框都不画,如果你对整个app设置该style,该app就没有虚线框了,如果该派生style想只对QListWidget不要虚线框,你可以试试在过滤时对widget做个筛选:

    case PE_FrameFocusRect:
        {
            QListWidget * pList = qobject_cast<QListWidget *>(widget);
            if(pList)
            {
                break;
            }
            else
            {
                QCleanlooksStyle::drawPrimitive(element, option, painter, widget);
            }


            break;
        }
不过我没试过,你可以去试试。
快速回复
限100 字节
 
上一个 下一个