QStyle自定义重绘QRubberBand控件

简介: 根据QStyle的继承关系和重绘原理;通过实现一个继承QCommonStyle类的实现,实现自己的自定义控件QRubberBand控件。

本博文的简述or解决问题?

详情: 见简介


编程环境: deepin 15.11 x64 专业版 Kernel: x86_64 Linux 4.15.0-30deepin-generic

编程软件: Qt Creator 4.8.2 (Enterprise)Qt 5.9.8


运行效果:

先上一张最终的重绘运行效果图:


QRubberBand重绘:

这几就不翻开官方简介了,话说初次看到QRubberBand这个名字的时候,我一脸的懵逼。这个控件,我怎么听都没有听说过,更没有见过。

但是: 如果有人和你讲,这就是windows的这个东西,那就很大家都见过了,就是多选文件时候的那个高亮矩形,如下图

绘画思路:

  • 对应的重载函数里面,case 这个控件,然后绘画一个矩形(其画刷和边框的颜色是不一样的)

代码如下:

QPainter *p, const QWidget *w) const
{
    switch (element) {
    case CE_RubberBand: {
        if (const QStyleOptionRubberBand *rubber = qstyleoption_cast<const QStyleOptionRubberBand *>(opt)) {
            QColor color = opt->palette.highlight().color();
            color.setAlphaF(0.1);
            p->setBrush(color);
            color.setAlphaF(0.2);
            p->setPen(QPen(color, 1));
            p->drawRect(opt->rect.adjusted(0, 0, -1, -1));
            return;
        }
        break;
    }
    default:
        break;
    }

    QCommonStyle::drawControl(element, opt, p, w);
}

开心分享:

因为有着许许多多的热心网友的无私分享,从他们的博客中学习成长,学会很多,故也不辞辛苦也将自己的项目或经验整理成博客的形式,也提供给一起大家学习探讨与交流


系列地址:

QtExamples

欢迎 starfork 这个系列的 QT / DTK 学习,附学习由浅入深的目录。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

偕臧x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值