需求

qt 需要在 QChartView 被点击时,跳转详情页面。

解决

其实也简单,只需要 override mousePressEvent 即可。

  1. 新建一个类 public 继承 QChartView
  2. 在这个类里面重写 mousePressEvent, 每当按下的时候发出 Press 的信号
  3. 在前一个页面的代码中绑定 Press 这个信号和详情的页面。

这样就可以在点击图表的时候,发出信号,触发详情页面的打开。

#ifndef CHARTBRIEFVIEW_H
#define CHARTBRIEFVIEW_H

#include <QWidget>
#include <QtCharts/QChartGlobal>
#include <QtCharts/QChartView>

QT_CHARTS_BEGIN_NAMESPACE
class QChartView;
class QChart;
QT_CHARTS_END_NAMESPACE

QT_CHARTS_USE_NAMESPACE

class ChartBriefView : public QChartView
{
    Q_OBJECT
public:
    ChartBriefView(QChart *chart, QWidget *parent = nullptr);

signals:
    void Press(int id);

private:
    void mousePressEvent(QMouseEvent *event) override;
};

#endif // CHARTBRIEFVIEW_H
#include "chart_brief_view.h"

#include <QDebug>

ChartBriefView::ChartBriefView(QChart *chart, QWidget *parent) : QChartView(chart, parent)
{

}

void ChartBriefView::mousePressEvent(QMouseEvent *event)
{
    qDebug() << "chart view press" << Qt::endl;
    emit Press(0);
}
connect(chartView, &ChartBriefView::Press, this, &ControllerForm::ClickSensor);

参考

QtCharts图形移动和缩放

Qt QChart 自定义qChartView(重写鼠标事件)完美实现缩放与平移(新增android下手势缩放实现)

qt鼠标事件总结(坐标,跟踪,点击判断)