功能
实现QtCharts曲线图移动和缩放:
- 按住鼠标左键拖动曲线可移动曲线;
- 滚动鼠标滚轮实现图形X轴方向的缩放;
- 安装Ctrl,滚动鼠标滚轮实现图形Y轴方向的缩放;
- 按鼠标右键恢复图形初始状态;
- 缩放过程以鼠标当前位置为缩放中心;
- 鼠标移动过程中会在左上角显示当前坐标。
实现
继承QChartView,主要重新实现鼠标事件和键盘事件。
- 移动图形利用QChart的scroll函数;
void scroll(qreal dx, qreal dy, const QRectF &rect = QRectF());
鼠标按下时,记录按下状态,并记录当前坐标位置,在移动事件内计算鼠标移动的距离,以此设置图形滚动的距离,即可实现移动 - 缩放则设置当前坐标轴的显示范围;
void setRange(const QVariant &min, const QVariant &max);
核心代码
- 实现移动
void ChartView::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton) {
prevPoint_ = event->pos();
leftButtonPressed_ = true;
}
}
void ChartView::mouseMoveEvent(QMouseEvent *event)
{
if (!coordItem_) {
coordItem_ = new QGraphicsSimpleTextItem{
chart() };
coordItem_->setZValue(5);
coordItem_->setPos(100, 60);
coordItem_->show();
}
const QPoint curPos{
event->pos() };
const QPo