实现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 QPointF curVal{ chart()->mapToValue(QPointF(curPos)) };
coordItem_->setText(QString("X = %1, Y = %2").arg(curVal.x()).arg(curVal.y()));
if (leftButtonPressed_) {
const auto offset = curPos - prevPoint_;
prevPoint_ = curPos;
if (!alreadySaveRange_) {
saveAxisRange();
alreadySaveRange_ = true;
chart()->scroll(-offset.x(), offset.y());
void ChartView::mouseReleaseEvent(QMouseEvent *event)
leftButtonPressed_ = false;
if (event->button() == Qt::RightButton) {
if (alreadySaveRange_) {
chart()->axisX()->setRange(xRange_[0], xRange_[1]);
chart()->axisY()->setRange(yRange_[0], yRange_[1]);
void ChartView::wheelEvent(QWheelEvent *event)
#if (QT_VERSION <= QT_VERSION_CHECK(6,0,0))
const auto pos = QPointF(event->pos());
const auto isZoomIn = event->delta() > 0;
#else
const auto pos = event->position();
const auto isZoomIn = event->angleDelta().y() > 0;
#endif
const QPointF curVal = chart()->mapToValue(pos);
if (!alreadySaveRange_) {
saveAxisRange();
alreadySaveRange_ = true;
auto zoom = [](QValueAxis* axis, double centre, bool zoomIn) {
constexpr auto scaling{ 1.5 };
const double down = axis->min();
const double up = axis->max();
double downOffset{};
double upOffset{};
if (zoomIn) {
downOffset = (centre - down) / scaling;
upOffset = (up - centre) / scaling;
else {
downOffset = (centre - down) * scaling;
upOffset = (up - centre) * scaling;
axis->setRange(centre - downOffset, centre + upOffset);
if (ctrlPressed_) {
auto axis = qobject_cast<QValueAxis*>(chart()->axisY());
zoom(axis, curVal.y(), isZoomIn);
} else {
auto axis = qobject_cast<QValueAxis*>(chart()->axisX());
zoom(axis, curVal.x(), isZoomIn);
完整代码和示例程序请在QtCharts图形移动和缩放或 Github下载。
功能实现QtCharts曲线图移动和缩放:按住鼠标左键拖动曲线可移动曲线;滚动鼠标滚轮实现图形X轴方向的缩放;安装Ctrl,滚动鼠标滚轮实现图形Y轴方向的缩放;按鼠标右键恢复图形初始状态;缩放过程以鼠标当前位置为缩放中心;鼠标移动过程中会在左上角显示当前坐标。实现继承QChartView,主要重新实现鼠标事件和键盘事件。移动图形利用QChart的scroll函数;voi...
整理 | 屠敏
出品 | CSDN(ID:CSDNnews)
有竞争才会有进步,在第四次工业革命到来之际,随着物联网、人工智能、自动化、区块链、XR 等技术的逐渐成熟,底层工具篇中的编程语言界发生了怎样的变化?真实情况究竟如何?
近日,一月一更的 TIOBE 编程社区为我们揭晓了最新编程语言的现状。
在伊始之际,需要注意的是,TIOBE 编程语言排行榜是编程语言流行趋势的一个指标,这份排行榜排名基于全球技术工程师、课程和第三方供应商的数量,其中包括了流行的搜索引擎以及技术社区,如 Google、Bing、百度、维基百科、YouTube、CSDN 等等。具体的计算方式详见:https://www
文章目录前言基于 QChart 缩放的几种方式使用QChartView来缩放使用QChart来平移和缩放使用QValueAxis或者QDateTimeAxis来平移和缩放Qt曲线图表模块QChart库缩放、平移实例
最近使用Qt for python 做了一个图表,有个需求是用鼠标中轮,根据中轮的滚动来放大缩小显示的曲线,我这边用Qml实现的QChart图表, 当然QWidget的相应方法也会提到,都是一样的,相对于qml实现这个功能是真麻烦,得使用C++才能实现,而我又是使用的python,所以难度
void QChart::scroll(qreal dx, qreal dy)
按 dx 和 dy 指定的距离滚动图表的可见区域。对于极图表,dx 表示沿角轴而不是距离的角度。
QList<QAbstractAxis *> QChart::axes(Qt::Orientations orientation = Qt::Horizontal|Qt::Vertical, QAbstractSeries *series = nullptr) const
返回连接到 series的轴,并按 ..
原文链接:https://blog.csdn.net/kpengk/article/details/105800525
原博主写的特别好,我找了很久才找到这篇资源,直接复制就可以用,而且效果实现也很棒,在此感谢!
实现QtCharts曲线图移动和缩放:
按住鼠标左键拖动曲线可移动曲线;
滚动鼠标滚轮实现图形X轴方向的缩放;
按住Ctrl,滚动鼠标滚轮实现图形Y轴方向的缩放;
按鼠标右键恢复图形初始状态;
缩放过程以鼠标当前位置为缩放中心;
鼠标移动过程中会在左上角显示当前坐标。
继承QCha
Banzy666: