Qt文档阅读笔记-Zoom Line Example

Posted IT1995

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt文档阅读笔记-Zoom Line Example相关的知识,希望对你有一定的参考价值。

背景

这篇博文展示了如何创建放缩效果。

这里用户自定义放缩效果主要是使用QRubberBand,并且这个效果需要鼠标进行触摸手势,才能实现平移和放缩。

自定义放缩效果

首先构造一条直线数据,如下代码:

QLineSeries *series = new QLineSeries();
for (int i = 0; i < 500; i++) 
    QPointF p((qreal) i, qSin(M_PI / 50 * i) * 100);
    p.ry() += QRandomGenerator::global()->bounded(20);
    *series << p;

这里可以看到这条直线数据,x轴是0~500,每1个单元一个点,y轴是qSin(M_PI / 50 * i) * 100,中学以来我们都知道sinx是个曲线图像,并且当x为π时,图像会与x轴相交,所以qSin(M_PI / 50 * i)的含义就是变化相位,变化成,当x取50的倍数时,图像与x轴相交,最后那个*100,是把sin函数从[-1,1]的值放大到[-100,100]。最后是在y轴加上一个0~20的随机数。我个人觉得是增加图形的毛刺感。

下面写一个QChartView的派生类

class ChartView : public QChartView

这里需要重写其鼠标、键盘方法:

protected:
     bool viewportEvent(QEvent *event);
     void mousePressEvent(QMouseEvent *event);
     void mouseMoveEvent(QMouseEvent *event);
     void mouseReleaseEvent(QMouseEvent *event);
     void keyPressEvent(QKeyEvent *event);

下面自定义下键盘放缩事件,当键盘按下“+”时进行放大,按下“-”时进行缩小。

 void ChartView::keyPressEvent(QKeyEvent *event)
 
     switch (event->key()) 
     case Qt::Key_Plus:
         chart()->zoomIn();
         break;
     case Qt::Key_Minus:
         chart()->zoomOut();
         break;

下面写一个QChart的派生类

 class Chart : public QChart

接下来是处理鼠标的手势:

 bool Chart::sceneEvent(QEvent *event)
 
     if (event->type() == QEvent::Gesture)
         return gestureEvent(static_cast<QGestureEvent *>(event));
     return QChart::event(event);
 

 bool Chart::gestureEvent(QGestureEvent *event)
 
     if (QGesture *gesture = event->gesture(Qt::PanGesture)) 
         QPanGesture *pan = static_cast<QPanGesture *>(gesture);
         QChart::scroll(-(pan->delta().x()), pan->delta().y());
     

     if (QGesture *gesture = event->gesture(Qt::PinchGesture)) 
         QPinchGesture *pinch = static_cast<QPinchGesture *>(gesture);
         if (pinch->changeFlags() & QPinchGesture::ScaleFactorChanged)
             QChart::zoom(pinch->scaleFactor());
     

     return true;
 

项目文件如下:

这个项目是Qt官方实例,在此就不上传了。感兴趣的朋友,可以直接去qt creator中打开Zoom Line Example。

以上是关于Qt文档阅读笔记-Zoom Line Example的主要内容,如果未能解决你的问题,请参考以下文章

Qt文档阅读笔记-Simple Chat Example解析

Qt文档阅读笔记-Qt5录音功能的实现

Qt文档阅读笔记-Broadcast Sender Example解析

Qt文档阅读笔记-QScopedPointer解析及实例

Qt文档阅读笔记-QNetworkProxy::ProxyType解析(Qt设置Fiddler代理)

Qt文档阅读笔记-QNetworkProxy::ProxyType解析(Qt设置Fiddler代理)