Qwt笔记(三)之QwtPolarPlot简单使用(1)

104 篇文章 126 订阅

一.前言
文章只是楼主学习过程的记录,不能面面俱到,也不能每个点都讲到,不喜勿喷

二.QwtPolarPlot是啥
源码注释原文:
A plotting widget, displaying a polar coordinate system
这一个绘图小部件,可以显示极坐标系统
————————————————————————————————
An unlimited number of plot items can be displayed on
its canvas. Plot items might be curves (QwtPolarCurve), markers
(QwtPolarMarker), the grid (QwtPolarGrid), or anything else derived
from QwtPolarItem.
可以显示无限数量的plot项目在它的画布上,绘图项目可以是曲线(QwtPolarCurve),标记(QwtPolarMarker),网格(QwtPolarGrid),或者其他从QwtPolarItem派生的任何东西

三.使用举例
1.拖动一个qwtPlorPlot
在这里插入图片描述
2.基本使用

    // 设置标题
    ui->qwtPolarPlot->setTitle(QStringLiteral("qwtPolarPlot"));

    // 设置背景颜色
    ui->qwtPolarPlot->setPlotBackground (QBrush( Qt::yellow, Qt::SolidPattern ));

    // 设置网格效果属性
    QwtPolarGrid *grid = new QwtPolarGrid();
    grid->setFont(QFont("Microsoft YaHei UI Light", 16, QFont::Bold));
    grid->setPen(QPen(Qt::blue, 1, Qt::SolidLine));

    // 设置坐标数值样式
    grid->setAxisPen(QwtPolar::AxisTop,QPen(Qt::red));
    grid->setAxisPen(QwtPolar::AxisRight,QPen(Qt::black));

    grid->attach(ui->qwtPolarPlot);

    // 添加数值(不设置网格,看不到效果)
    ui->qwtPolarPlot->setScale(QwtPolar::ScaleAzimuth, 0, 360, 30);  // 圆环数值范围
    ui->qwtPolarPlot->setScale(QwtPolar::ScaleRadius, 0, 20, 1);     // 半径范围

    grid->showGrid(QwtPolar::AxisRight,true);
    grid->showAxis(QwtPolar::AxisLeft,false);
    grid->showAxis(QwtPolar::AxisTop,true);
    grid->showAxis(QwtPolar::AxisBottom,false);

在这里插入图片描述
3.添加数据,这个控件可以显示曲线 标记啥的,这里选用了最简单的曲线作为例子
查阅文档知道QwtPolarCurve设置的数据类型是QwtSeriesData< QwtPointPolar >
在这里插入图片描述
QwtSeriesData< QwtPointPolar >中有三个纯虚函数需要我们来实现,分别是

	virtual size_t size () const =0
	virtual QwtPointPolar sample (size_t i) const =0
	virtual QRectF boundingRect () const =0

3.1故先定一个数据类PolarData

class PolarData:public QwtSeriesData<QwtPointPolar>
{
    virtual size_t size() const
    {
        return 360;
    }

    virtual QwtPointPolar sample(size_t size) const
    {
        double data;
        double r;
        data = size/180.0 *M_PI;
        // ❤函数
        r = 8.0 *(1-cos(data));
        return QwtPointPolar(size,r);
    }

    virtual QRectF boundingRect() const
    {
        return QRectF(5.0,5.0,10,10);
    }
};

3.2添加数据核心代码

    QwtPolarCurve *polarCurve = new QwtPolarCurve();
    polarCurve->setPen(QPen(Qt::darkGray,5));
    PolarData *data = new PolarData();
    polarCurve->setData(data);
    polarCurve->attach(ui->qwtPolarPlot);

在这里插入图片描述
3.3全部代码

 // 设置标题
    ui->qwtPolarPlot->setTitle(QStringLiteral("qwtPolarPlot"));

    // 设置背景颜色
    ui->qwtPolarPlot->setPlotBackground (QBrush( Qt::yellow, Qt::SolidPattern ));

    // 设置网格效果属性
    QwtPolarGrid *grid = new QwtPolarGrid();
    grid->setFont(QFont("Microsoft YaHei UI Light", 16, QFont::Bold));
    grid->setPen(QPen(Qt::blue, 1, Qt::SolidLine));

    // 设置坐标数值样式
    grid->setAxisPen(QwtPolar::AxisTop,QPen(Qt::red));
    grid->setAxisPen(QwtPolar::AxisRight,QPen(Qt::black));

    grid->attach(ui->qwtPolarPlot);

    // 添加数值(不设置网格,看不到效果)
    ui->qwtPolarPlot->setScale(QwtPolar::ScaleAzimuth, 0, 360, 30);  // 圆环数值范围
    ui->qwtPolarPlot->setScale(QwtPolar::ScaleRadius, 0, 20, 1);     // 半径范围

    grid->showGrid(QwtPolar::AxisRight,false);
    grid->showAxis(QwtPolar::AxisLeft,true);
    grid->showAxis(QwtPolar::AxisTop,true);
    grid->showAxis(QwtPolar::AxisBottom,false);

    //
    QwtPolarCurve *polarCurve = new QwtPolarCurve();
    polarCurve->setPen(QPen(Qt::darkGray,5));
    PolarData *data = new PolarData();
    polarCurve->setData(data);
    polarCurve->attach(ui->qwtPolarPlot);

三.其他
1.showGrid好像只能设置显示上和右的坐标,其他两个方向好像设置不了,设置了true属性,就会导致数值都挤到一起,如下图
(如果可以设置的话请评论指导一下,捣鼓了许多没搞出来)

    grid->showGrid(QwtPolar::AxisRight,false);
    grid->showAxis(QwtPolar::AxisLeft,true);

在这里插入图片描述
2.对于设置半径范围,setScale函数最后一个参数为设置步长,但是似乎设置没啥反应,他固定是4个层级的递增,我设置了范围是0-20,递增是1,但是界面上显示的5 -10 - 15,,经过测试发现,他这个应该是自动设置,小于或者大于都会自适应(若有错,请评论区指导)

 ui->qwtPolarPlot->setScale(QwtPolar::ScaleRadius, 0, 20, 1);     // 半径范围
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值