持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情
注:示例为Qt 5.1.1中的示例。
本文旨在学习Qt示例的源码,总结函数使用方法,学习编程思想,提高自己的编程能力。
示例运行效果:
文件目录:
具体实现:
GraphicsView类:
- 这个类的声明在view.h文件中,继承自QGraphicsView类。
- QGraphicsView是一个小部件类,显示QGraphicsScene的内容。QGraphicsView将QGraphicsScene的内容显示在一个可滚动的视图窗口中。
- GraphicsView中有一个view成员变量,还有一个wheelEvent()函数,用于重新实现QGraphicsScene的滚轮事件控制放大缩小的滚轮的滚动。
GraphicsView是图中的这部分:
构造函数: 构造函数实现了对view指针的保存。
wheelEvent函数:
这个函数是由鼠标滚动滚轮的信号触发的,当收到滚动滚轮的信号后,判断是否同时按下ctrl键,如果是,则调用view的放大和缩小函数。
modifiers(): 返回事件发生前已存在的键盘修饰符标志。
delta(): 返回滚轮的滚动距离。向上大于0;向下小于0。
accept(): 设置事件对象的接收标志,设置accept表示事件接收者想要接收该事件,不需要传递到父部件。不接收的事件将会传递到父部件中。
View类:
View类中的成员变量为窗口中的所有小部件的指针,成员函数多为一些槽函数,通过点击按钮或触发鼠标和键盘事件来实现窗口显示的变化。包括放大、缩小、重置、设置矩阵、设置指针模式、选择OpenGL、选择Antialiasing、打印、向左旋转、向右旋转等。
View是图中的这部分:
这里对View类和GraphicsView类的关系做一个说明:从关系上可以看出,View中创建了一个GraphicsView对象,GraphicsView对象通过构造函数将View的指针传进去,控制View中滑块的滚动。
构造函数:
设置了边框样式。创建一个GraphicsView部件,并设置GreaphicsView的属性,包括抗锯齿、设置拖拽模式、设置优化标志、设置Viewport更新模式、设置转换锚。创建了放大、缩小按钮,创建了控制放大缩小的滑块部件。
QGraphicsView::RubberBandDrag: 当在视口中按下并拖动鼠标时,一根橡皮筋就会出现。拖动鼠标将设置橡皮筋的几何形状,橡皮筋覆盖的所有项目都被选中。对于非交互式视图禁用此模式。效果如图:
出现蓝色选中区域框。
QGraphicsView::DontSavePainterState: 一个改善渲染性能的标志,默认未启用,因为可能会产生副作用,不同绘制设备、平台可能有所不同。不要启用保存状态,保持状态的意思是调用QPainter::setPen()/setBrush()后不用在绘画结束后恢复状态。(暂时不知道设置这个标志与不设置有什么区别)
QGraphicsView::SmartViewportUpdate: Scene里的内容发生变化时,QGraphicsView通过分析需要重绘的区域来找到最佳的更新模式。(暂时不知道设置这个标志与不设置有什么区别)
QGraphicsView::AnchorUnderMouse: 当用户调整视图大小或转换视图时QGraphicsView使用鼠标下方的点被用作锚点。在这里的效果为,当我们按下ctrl按键并滚动鼠标滚轮进行放大或缩小时,放大或缩小是以我们鼠标所在的位置为锚点的。
style()->pixelMetric(QStyle::PM_ToolBarIconSize): 获取工具栏图标的像素值,即工具栏图标大小。
setAutoRepeat、setAutoRepeatInterval和setAutoRepeatDelay: 如果启用这个函数,那么当按钮按下后,按钮的pressed()、released()和clicked()信号将会持续定时发射。autoRepeatInterval以毫秒为单位定义自动重复间隔的长度。autoRepeatDelay定义在启动自动重复之前以毫秒为单位的初始延迟。
setTickPosition(QSlider::TicksRight): 在滑块的右侧绘制标记。效果如图:
在右边:
在左边:
这部分实现右侧放大缩小按钮和滑块的创建和布局,以及下侧旋转按钮、滑块和重置按钮的创建和布局。
这部分实现上侧标签和按钮的创建和布局。当支持QpenGL的时候,QpenGL按钮启用,否则禁用。
setExclusive: 实现button组内的按钮互斥的效果。
使用网格布局对页面里的部件进行布局。对信号和槽函数进行连接。调用setupMatrix()函数。
未完待续...