QT自定义扫描控件,支持任意方位拖动和拖动扫描范围。

部分代码:

csharp 复制代码
void FishControlForm::paintEvent(QPaintEvent *event)
{
    QPainter p(this);
    p.setRenderHints(QPainter::Antialiasing|QPainter::SmoothPixmapTransform);

    p.translate(m_centerPoint);
    //bg
    p.setPen(Qt::white);
    p.drawEllipse(-m_radius,-m_radius,m_radius*2,m_radius*2);

    if (!m_state){
        p.save();
        p.rotate(-m_dropAngle);
        //扇形区域
        QRadialGradient Radial(0,0,m_radius,0,0);    //设置圆的原点和焦点在中心
        Radial.setColorAt(0,QColor("#ccffffff"));
        Radial.setColorAt(1,QColor("#00ffffff"));
        p.setBrush(Radial);
        p.setPen(Qt::NoPen);
        p.drawPie(-m_radius,-m_radius,m_radius*2,m_radius*2,80*16,MinFishScanAngle*16);
        p.setBrush(Qt::NoBrush);

        p.restore();

        p.setPen(Qt::white);
        p.drawEllipse(getDropRect());
    }
    else{
        if (m_rtShow){
            p.save();
            p.rotate(-m_dropAngleRt);

            p.save();
            p.rotate(16);
            if (!m_lfShow){
                p.setBrush(QBrush(QColor("#70ffffff")));
                p.drawEllipse(-46,-210,93,12);
            }
            else{
                p.setBrush(QBrush(QColor("#70777777")));
                p.drawEllipse(-46,-210,93,12);
            }
            p.restore();

            p.restore();

            p.setPen(Qt::white);
            p.drawEllipse(getDropRect2());
        }
        if (m_lfShow){
            p.save();
            p.rotate(-m_dropAngleLf);

            p.save();
            p.rotate(-16);
            if (!m_rtShow){
                p.setBrush(QBrush(QColor("#70ffffff")));
                p.drawEllipse(-46,-210,93,12);
            }
            else{
                p.setBrush(QBrush(QColor("#70777777")));
                p.drawEllipse(-46,-210,93,12);
            }
            p.restore();

            p.restore();

            p.setPen(Qt::white);
            p.drawEllipse(getDropRect3());
        }

        //扇形区域
        QRadialGradient Radial(0,0,m_radius,0,0);    //设置圆的原点和焦点在中心
        Radial.setColorAt(0,QColor("#ccffffff"));
        Radial.setColorAt(1,QColor("#00ffffff"));
        p.setBrush(Radial);
        p.setPen(Qt::NoPen);
        int angle = (-m_dropAngleRt+m_dropAngleLf+MinFishScanAngle)%360;
        if (angle < 0)
            angle = 360 + angle;
        p.drawPie(-m_radius,-m_radius,m_radius*2,m_radius*2,(m_dropAngleRt+80)*16,angle*16);

        //自动扫描扇形
        p.drawPie(-m_radius,-m_radius,m_radius*2,m_radius*2,(m_scanAngle+80)*16,20*16);
    }
}

源码

相关推荐
wp123_13 分钟前
硬件元器件笔记|IPX8 防水 Type‑C 母座安费诺 124018802112A 与 TONEVEE TY48086‑24A 分析
c语言·开发语言·笔记
wuyk5555 分钟前
4.树:一对多的层次数据结构
开发语言·数据结构·stm32·单片机
luj_17681 小时前
桥牌思维启示:系统设计的模块化架构
c语言·开发语言·c++·经验分享·算法
caimouse3 小时前
ReactOS 图形系统分析(16):字符串对象 — STROBJ(string.c)
c语言·开发语言
Aphelios3803 小时前
一次锁内网络IO引发的Tomcat线程池“饿死”事故
java·开发语言·spring boot·elasticsearch·tomcat·网络io阻塞·线程池耗尽
不可求~3 小时前
C++ std::string_view 不是字符串:从悬空引用到安全用法
java·开发语言·c++
90后小陈老师4 小时前
PHP 配置默认值失效排查实录:isset 兜底遇上表单空串回填,首页文案是怎么集体消失的
开发语言·php
JJJennie7775 小时前
Gemini 3.7 Flash 上线,Google 想让 AI 多干活
开发语言·javascript·ecmascript
wuyk5556 小时前
Python 第三章:列表 List
服务器·开发语言·python