TreeView消除焦点所在项上虚框的办法

        Qwidget在获取焦点时会绘制焦点虚框,在使用样式表制定皮肤的情况下可能很不和谐。采用setFocusPolicy(Qt::NoFocus),或者在样式表中指定padding:0px 这种方法试了无效果。查了下资料,方法好像很多,对于TreeView可以用重写代理的办法:

class FileViewerDelegate : public QItemDelegate
{
    Q_OBJECT
public:
    FileViewerDelegate(QObject *parent = 0) : QItemDelegate(parent){}
    virtual void drawFocus(QPainter *, const QStyleOptionViewItem &,
                           const QRect &) const
    {
        // do nothing, so as to remove the virtual selected rectangle above treeview item
    }
};

主函数中:

    FileViewerDelegate *fileViewerDelegate = new FileViewerDelegate(this);
    treeView->setItemDelegate(fileViewerDelegate);

这样虚框就消除了。对于有check框的视图如TableView,还可以在Delegate中加入下面代码达到类似效果:

virtual void drawCheck(QPainter *painter, const QStyleOptionViewItem &option,
                           const QRect &rect, Qt::CheckState state) const {}

        网上搜到还有下列方法应该也是可以的,没试过:

 
#include <qproxystyle>
class MyProxyStyle : public QProxyStyle
{
public:
    virtual void drawPrimitive(PrimitiveElement element, const QStyleOption * option,
                               QPainter * painter, const QWidget * widget = 0) const
    {
        if (PE_FrameFocusRect == element)
        {
            /// do not draw focus rectangle
        }
        else
        {
            QProxyStyle::drawPrimitive(element, option,painter, widget);
        }
    }
};
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    qApp->setStyle(new MyProxyStyle);//添加style为这个工程
    return a.exec();
}
</qproxystyle>

可以去掉所有部件的矩形点阵虚框,详细介绍:http://blog.csdn.net/love_gaohz/article/details/13021409#



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值