Qt实践之使用鼠标滚轮改变QChart图表坐标轴范围

鼠标滚轮事件来改变以QDateTimeAxis作为横轴的图表的横轴范围


要使用鼠标滚轮事件来改变以QDateTimeAxis作为横轴的图表的横轴范围,你可以通过以下步骤实现:

  1. 创建一个QChart对象和一个QChartView对象,用于显示图表。
QChart *chart = new QChart();
QChartView *chartView = new QChartView(chart);
  1. 创建一个QDateTimeAxis对象,并将其设置为图表的横轴。
QDateTimeAxis *xAxis = new QDateTimeAxis();
chart->addAxis(xAxis, Qt::AlignBottom);
  1. 创建一个滚轮事件过滤器,用于捕捉鼠标滚轮事件。
class WheelEventFilter : public QObject
{
    Q_OBJECT
public:
    WheelEventFilter(QDateTimeAxis *xAxis, QObject *parent = nullptr)
        : QObject(parent), m_xAxis(xAxis) {}

protected:
    bool eventFilter(QObject *obj, QEvent *event) override
    {
        if (event->type() == QEvent::Wheel) {
            QWheelEvent *wheelEvent = static_cast<QWheelEvent*>(event);
            // 获取滚动的角度
            int delta = wheelEvent->angleDelta().y();
            // 根据滚动方向和角度调整横轴的范围
            if (delta > 0) {
                m_xAxis->setMin(m_xAxis->min().addDays(1));
                m_xAxis->setMax(m_xAxis->max().addDays(1));
            } else {
                m_xAxis->setMin(m_xAxis->min().addDays(-1));
                m_xAxis->setMax(m_xAxis->max().addDays(-1));
            }
            return true; // 拦截事件,不再传递给其他控件,或者调用event->accept()来接受事件,表示事件已经被处理。如果不调用该函数,事件会继续传递给其他可能处理该事件的控件
        }
        return QObject::eventFilter(obj, event);
    }

private:
    QDateTimeAxis *m_xAxis;
};
  1. 将滚轮事件过滤器应用到chartView对象上。
chartView->installEventFilter(new WheelEventFilter(xAxis, chartView));

通过以上步骤,你可以实现使用鼠标滚轮事件改变以QDateTimeAxis作为横轴的图表的横轴范围。在滚轮事件过滤器中,根据滚动方向和角度调整横轴的范围,可以根据具体需求进行调整。记得在需要的地方调用chartView->show()来显示图表。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值