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