因为我的主窗口是继承QMainWindow,所以没法再继承QChatView了
所以需要我们重写自己的QChartView
太懒了,这边简写一下主要代码吧:
MyChartView.h里面
class MyChartView : public QChartView
{
public:
.....
protected:
virtual void mousePressEvent(QMouseEvent *event) override;
virtual void mouseMoveEvent(QMouseEvent *event) override;
virtual void mouseReleaseEvent(QMouseEvent *event) override;
private:
QChart* m_pChart;
QLineSeries* m_pPixelSeries;
QPointF m_StartPoint; //拖拽起点
bool m_bIsDragging; //是否拖拽
double m_dStartY;
};
MyChartView.cpp里面
virtual void mousePressEvent(QMouseEvent *event) override {
if (event->button() == Qt::LeftButton) {
QPointF qpoint = m_pChart->mapToValue(event->pos());
QList<QAbstractSeries *> lSeriesList = m_pChart->series();
//寻找离点最近的一条线
for(QAbstraceSeries *serie : lSeriesList){
QLineSeries *lineSeries = static_cast<QLineSeries*>(serie);
for(auto &point : lineSeries->points()){
if(QVector2D(point- qpoint).length < 50){ //这边是设置精度
m_pPixelSeries = lineSeries;
m_StartPoint = point;
m_bIsDragging = true;
return; //找到即返回
}
}
}
}
QChartView::mousePressEvent(event);
}
//我这边是根据图像Gama的规则更新曲线的
virtual void mouseMoveEvent(QMouseEvent *event) override {
if (isDragging && targetSeries) {
//代码内容太多了 下次再更新
}
QChartView::mouseMoveEvent(event);
}
virtual void mouseReleaseEvent(QMouseEvent *event) override {
if (event->button() == Qt::LeftButton && m_bIsDragging) {
m_bIsDragging= false;
m_pPixelSeries = nullptr;
}
QChartView::mouseReleaseEvent(event);
}