该示例展示了如何创建您自己的自定义缩放效果。如何使用QRubberBand使用鼠标创建您自己的自定义缩放效果,以及如何使用触摸手势进行平移和缩放。
Qt组件推荐:
- QtitanRibbon| 下载试用: 遵循Microsoft Ribbon UI Paradigm for Qt技术的Ribbon UI组件,致力于为Windows、Linux和Mac OS X提供功能完整的Ribbon组件。
- QtitanChart | 下载试用 :是一个C ++库,代表一组控件,这些控件使您可以快速地为应用程序提供漂亮而丰富的图表。并且支持所有主要的桌面
该示例展示了如何创建您自己的自定义缩放效果。如何使用QRubberBand使用鼠标创建您自己的自定义缩放效果,以及如何使用触摸手势进行平移和缩放。
运行示例
要从Qt Creator运行示例,请打开欢迎模式并从示例中选择示例。有关更多信息,请访问构建和运行示例。
自定义缩放效果
让我们首先使用一些示例数据创建一个线系列。
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; }
然后我们通过从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;}
请注意,您需要对QMainWindow和QChart调用grabGesture() 。
====================================================
想要了解或购买Qt正版授权的朋友,欢迎咨询官方客服
Qt技术交流群现已开通,QQ搜索群号“765444821”或者扫描下方二维码即可加入
标签:
来源:慧都
声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!