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文档阅读笔记-Broadcast Sender Example解析