当前位置: 首页 > news >正文

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

请添加图片描述
部分代码:

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);
    }
}

源码

http://www.dtcms.com/a/25269.html

相关文章:

  • 数据结构(查找)
  • Python高级语法之urllib
  • Android Studio打包APK
  • 数字化赋能,3D数字博物馆开启沉浸式体验
  • 机器学习(李宏毅)——RNN
  • 第一章 初识LLMs
  • 基于python深度学习遥感影像地物分类与目标识别、分割实践技术应用
  • 从零搭建SpringBoot3+Vue3前后端分离项目基座,中小项目可用
  • Navicat Premium17 连接Oracle出现 “未加载 Oracle库
  • IDEA集成DeepSeek AI助手完整指南
  • 打开多个chrome历史记录
  • JAVA监听器(学习自用)
  • BEV:车轮接地点车辆修正3D框位置精度
  • 【数据结构】(10) 排序算法
  • 设计模式之适配模式是什么?以及在Spring AOP中的拦截器链的使用源码解析。
  • FreeSwitch的应用类模块
  • Python跨年烟花
  • Redis篇(环境搭建)
  • 【故障处理】- 11g迁19C数据泵报错: ORA-39083 ORA-06598 导致数据库大量对象导入不进去
  • Linux基本指令
  • 微信小程序text组件decode属性的小问题
  • WPF8-常用控件
  • 2025年新型智慧城市整体解决方案下载:顶层规划设计,应用总体建设方案
  • 【Linux Redis】关于用docker拉取Redis后,让虚拟机运行起来redis,并使得其可以连接到虚拟机外的navicat。
  • jessionid
  • linux云服务器部署deepseek,并通过网页访问
  • dify-AI 私有部署可修改前端页面
  • EasyExcel 自定义头信息导出
  • OpenVela——专为AIoT领域打造的开源操作系统
  • 分布式同步锁:原理、实现与应用