效果如图所示:
步骤如下:
1. 新建工程,并添加qcustomplot.h,qcustomplot.cpp
并在工程的pro文件添加printsupport
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport
2. 在ui里面添加一个Widget, 并提升为QCustomPlot,在这里我将这个Widget命名为plot
3. 开始写代码。
在此附上源码及注释。
// mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
void addPoint(double x, double y);
void clearData();
void plot();
private slots:
void clickedGraph(QMouseEvent *event);
private:
Ui::MainWindow *ui;
QVector<double> qv_x, qv_y;
};
#endif // MAINWINDOW_H
// mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->plot->setInteraction(QCP::iRangeDrag, true); //鼠标单击拖动
ui->plot->setInteraction(QCP::iRangeZoom, true); //滚轮滑动缩放
ui->plot->addGraph();
ui->plot->graph(0)->setScatterStyle(QCPScatterStyle::ssCircle);
ui->plot->graph(0)->setLineStyle(QCPGraph::lsNone);
//connect(ui->plot, SIGNAL(mousePress(QMouseEvent*)), SLOT(clickedGraph(QMouseEvent*))); //单击
connect(ui->plot, SIGNAL(mouseDoubleClick(QMouseEvent*)), SLOT(clickedGraph(QMouseEvent*))); //双击
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::addPoint(double x, double y)
{
qv_x.append(x);
qv_y.append(y);
}
void MainWindow::clearData()
{
qv_x.clear();
qv_y.clear();
}
void MainWindow::plot()
{
ui->plot->graph(0)->setData(qv_x,qv_y);
ui->plot->replot();
ui->plot->update();
}
void MainWindow::clickedGraph(QMouseEvent *event)
{
QPoint point = event->pos();
qDebug()<<ui->plot->xAxis->pixelToCoord(point.x())<<ui->plot->yAxis->pixelToCoord(point.y());
addPoint(ui->plot->xAxis->pixelToCoord(point.x()), ui->plot->yAxis->pixelToCoord(point.y()));
plot();
}
转载:利用QCustomPlot在图上画点并实现滚轮缩放和鼠标拖动_qcustomplot绘制点_李时珍的食疗志的博客-CSDN博客