qt学习之个人画板的实现(3)

来源:互联网 发布:开淘宝店的银行卡 编辑:程序博客网 时间:2024/05/20 05:25
昨晚又体验了一下双缓冲画图,我们来了解一下双缓冲在这里的作用(但今天的例子也只是实现了其中的第2点解决重影的问题,其他的大家可以自己学习,主要是理清方法)

如果不使用双缓冲绘图,会有以下几个问题:

(1)画布放大后,滚动条不跟着放大。

(2)绘制直线,矩形等图形时有重影。

如图:

(3)画布进行放大,旋转等操作后无法正常绘图。

应用坐标系的知识,在绘制图片时,当进行放大、拉伸等操作时,要改变相应的坐标值。具体过程参见相关资料,这里不作赘述。

利用两个QImage对象,一个保存临时图像,一个保存最终图像,这样实现交互绘图的方法就叫做双缓冲绘图。

接下来看一下目前的画图板的实现效果:


可以看到我在基于上次的实现的基础上添加了,处理几种特殊图形的方法。而这里要注意的便有两点:1、信号与槽机制的理解,2、双缓冲的使用。

注意图中左侧的画图工具框实质是一种叫做Dock的窗口,它与其它窗口的不同就是它可以在其父窗口中浮动,也可以停靠在父窗口的边界,就像一个工具栏一样。

大家可以

#include<QDockWidget>//调用

也可以直接通过desiner实现,具体的可以参阅帮助学习,此处不作赘述。


首先先上代码:

Mainwindow.h

Mainwindow.cpp

paintwidget.h
paintwidget.cpp
对于几个图标的添加我附下图:
在工程下新建一个资源文件,文件名自拟。之后会转到下图:


 
先点击添加前缀,选定/image,在添加文件,注意使用.png格式的图标,把它们放在你的工程所在文件夹里,不是debug文件夹。
注意使用图标时的对应关系,这也是信号与槽机制在使用时最要注意的。对应错了自然达不到效果。



之后,如果要新加入资源文件,我们右键选定images.qrc,选择打开编辑器又会会到上面的图中,方法不变。



0 0