运行截图如下:
文件结构图如下:
代码如下:
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include
#include
#include "qcustomplot.h"
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
void timerEvent(QTimerEvent *event);
public slots:
void btnClicked();
private:
Ui::Widget *ui;
QVector m_x,m_y;
QCPItemText *m_groupTracerText;
QCPItemCurve *m_groupTracerArrow;
int m_timerId;
int m_timeNum;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
for(int i=0;i<200;i++){
m_x.append(i);
m_y.append(m_x[i]*m_x[i]*i);
}
this->setWindowTitle("CSDN IT1995");
ui->widget->addGraph();
ui->widget->graph()->setData(m_x,m_y);
ui->widget->graph()->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssCircle, QPen(Qt::red, 3), QBrush(Qt::white), 22));
ui->widget->graph()->setPen(QPen(Qt::red,3));
ui->widget->setInteractions(QCP::iRangeDrag|QCP::iRangeZoom|QCP::iSelectLegend);
ui->widget->xAxis->setBasePen(QPen(Qt::red, 1));
ui->widget->yAxis->setBasePen(QPen(Qt::red, 1));
ui->widget->xAxis->setSubTickPen(QPen(Qt::red, 1));
ui->widget->yAxis->setSubTickPen(QPen(Qt::red, 1));
ui->widget->xAxis->setTickLabelColor(Qt::red);
ui->widget->yAxis->setTickLabelColor(Qt::red);
ui->widget->xAxis->grid()->setPen(QPen(QColor(40, 40, 40), 1));
ui->widget->yAxis->grid()->setPen(QPen(QColor(40, 40, 40), 1));
ui->widget->xAxis->grid()->setSubGridPen(QPen(QColor(180, 180, 180), 1));
ui->widget->yAxis->grid()->setSubGridPen(QPen(QColor(180, 180, 180), 1));
m_groupTracerArrow = new QCPItemCurve(ui->widget);
m_groupTracerText = new QCPItemText(ui->widget);
QColor color(0, 0, 0);
color.setAlphaF(0);
m_groupTracerArrow->setPen(color);
m_groupTracerText->setText("");
m_timeNum=0;
ui->widget->replot();
connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(btnClicked()));
m_timerId=startTimer(1000);
}
Widget::~Widget()
{
delete ui;
}
void Widget::timerEvent(QTimerEvent *event)
{
if(event->timerId()==m_timerId){
m_timeNum++;
}
if(m_timeNum>1){
QColor color(0, 0, 0);
color.setAlphaF(0);
m_groupTracerArrow->setPen(color);
m_groupTracerText->setText("");
m_timeNum=0;
ui->widget->replot();
}
}
void Widget::btnClicked()
{
ui->widget->xAxis->setRange(ui->spinBox->text().toInt()-10,ui->spinBox->text().toInt()+10);
ui->widget->yAxis->setRange(m_y[ui->spinBox->text().toInt()]-10,m_y[ui->spinBox->text().toInt()]+10);
m_groupTracerText->setColor(Qt::red);
m_groupTracerText->position->setType(QCPItemPosition::ptAxisRectRatio);
m_groupTracerText->setPositionAlignment(Qt::AlignRight|Qt::AlignTop);
m_groupTracerText->position->setCoords(1.0, 0.20);
m_groupTracerText->setText("就是这个点");
m_groupTracerText->setTextAlignment(Qt::AlignLeft);
m_groupTracerText->setFont(QFont(font().family(), 9));
m_groupTracerText->setPadding(QMargins(8, 0, 0, 0));
m_groupTracerArrow->setPen(QPen(Qt::red));
m_groupTracerArrow->start->setParentAnchor(m_groupTracerText->left);
m_groupTracerArrow->startDir->setParentAnchor(m_groupTracerArrow->start);
m_groupTracerArrow->startDir->setCoords(-40, 0);
m_groupTracerArrow->end->setCoords(m_x[ui->spinBox->text().toInt()],m_y[ui->spinBox->text().toInt()]);
m_groupTracerArrow->endDir->setParentAnchor(m_groupTracerArrow->end);
m_groupTracerArrow->endDir->setCoords(0, -40);
m_groupTracerArrow->setHead(QCPLineEnding::esSpikeArrow);
m_groupTracerArrow->setTail(QCPLineEnding(QCPLineEnding::esBar,(m_groupTracerText->bottom->pixelPosition().y()-m_groupTracerText->top->pixelPosition().y())*0.85));
ui->widget->replot();
}
main.cpp
#include "widget.h"
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}