昨晚又体验了一下
双缓冲画图,我们来了解一下双缓冲在这里的作用(但今天的例子也只是实现了其中的第2点解决重影的问题,其他的大家可以自己学习,主要是理清方法)
如果不使用双缓冲绘图,会有以下几个问题:
(1)画布放大后,滚动条不跟着放大。
(2)绘制直线,矩形等图形时有重影。
如图:
(3)画布进行放大,旋转等操作后无法正常绘图。
应用坐标系的知识,在绘制图片时,当进行放大、拉伸等操作时,要改变相应的坐标值。具体过程参见相关资料,这里不作赘述。
利用两个QImage对象,一个保存临时图像,一个保存最终图像,这样实现交互绘图的方法就叫做双缓冲绘图。
接下来看一下目前的画图板的实现效果:
可以看到我在基于上次的实现的基础上添加了,处理几种特殊图形的方法。而这里要注意的便有两点:1、信号与槽机制的理解,2、双缓冲的使用。
注意图中左侧的画图工具框实质是一种叫做Dock的窗口,它与其它窗口的不同就是它可以在其父窗口中浮动,也可以停靠在父窗口的边界,就像一个工具栏一样。
大家可以
#include<QDockWidget>//调用
也可以直接通过desiner实现,具体的可以参阅帮助学习,此处不作赘述。
首先先上代码:
Mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
#include "paintwidget.h"
#include
//滚动条
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_label_linkActivated(const QString &link);
signals:
void changeCurrentShape(paintWidget::shape newShape);//返回给画图组件paintwidget用来改变画图类型
privat