qcustomplot 极大值的显示【y轴自适应方法的组合使用】

1、显示效果

在这里插入图片描述

2、代码讲解

qcustomplot默认不能进行极大值的显示,默认y轴能显示的最大值为1e+15,为了显示10e+200等极大值时,需对y轴进行自适应操作。代码如下:

/*
     * y轴的自适应方法:
     * 1、rescaleValueAxis的第一个形参:决定是否以y的最大值去进行y轴的自适应。为true时,可将一个极大值显示在y轴上
     * 2、rescaleValueAxis的第二个形参:决定是否以当前x轴范围的y轴自适应,而不是根据所有x值的y进行自适应
     * 如果 inKeyRange 设置为 true,则仅考虑当前可见键轴范围内的数据点。
     *
    */
    ui->qcustomplot->graph(0)->rescaleValueAxis(true, true);//y的极大值显示出来,此时y的极大值在最大范围处
    ui->qcustomplot->graph(0)->rescaleAxes();//y轴自适应,极大值显示在y轴的范围中心

如果只有如下代码:

ui->qcustomplot->graph(0)->rescaleValueAxis(true, true);//y的极大值显示出来,此时y的极大值在最大范围处

则效果为:
在这里插入图片描述
此时y的极大值自动适应到当前y的可见范围,但是y的极大值处于最上方,而不是在y轴的中心。

如果只有如下代码:

ui->qcustomplot->graph(0)->rescaleAxes();//y轴自适应,极大值显示在y轴的范围中心

则效果为:
在这里插入图片描述
此时,即使将极大值添加到y轴,也去自适应了,但是不可将极大值自适应到y轴可见范围处。虽然当前看不到y的极大值,但是极大值已经在y轴上,只不过要通过手动拖动到极大值处。

3、整体代码

3.1 主界面

在这里插入图片描述

3.2 窗体的 .h 文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTimer>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();


private:
    Ui::MainWindow *ui;
    QTimer mDataTimer;

private slots:
  void timerSlot();
  void stop();
  void start();

};
#endif // MAINWINDOW_H

3.3 窗体的. cpp 文件

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    ui->qcustomplot->addGraph();

    //新建一个MainWindow窗体工程,在该界面上添加一个qcustomplot控件,两个pushbutton控件

    connect(ui->mybtn1, SIGNAL(clicked()), this, SLOT(start()));
    connect(ui->mybtn, SIGNAL(clicked()), this, SLOT(stop()));
    connect(&mDataTimer, SIGNAL(timeout()), this, SLOT(timerSlot()));

}

MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::timerSlot()
{
    ui->qcustomplot->graph(0)->addData(ui->qcustomplot->graph(0)->dataCount(), 6e+100);

    ui->qcustomplot->xAxis->rescale(true);//x轴自适应

    /*
     * y轴的自适应方法:
     * 1、rescaleValueAxis的第一个形参:决定是否以y的最大值去进行y轴的自适应。为true时,可将一个极大值显示在y轴上
     * 2、rescaleValueAxis的第二个形参:决定是否以当前x轴范围的y轴自适应,而不是根据所有x值的y进行自适应
     * 如果 inKeyRange 设置为 true,则仅考虑当前可见键轴范围内的数据点。
     *
    */
    ui->qcustomplot->graph(0)->rescaleValueAxis(true, true);//y的极大值显示出来,此时y的极大值在最大范围处
    ui->qcustomplot->graph(0)->rescaleAxes();//y轴自适应,极大值显示在y轴的范围中心

    ui->qcustomplot->xAxis->setRange(ui->qcustomplot->xAxis->range().upper, 100, Qt::AlignRight);

    ui->qcustomplot->replot();
}
void MainWindow::stop()
{
    mDataTimer.stop();
}
void MainWindow::start()
{
    mDataTimer.start(30);
}

详细工程见:https://download.csdn.net/download/asd_8_8_8_8_8_8_asd/45958910

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值