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

本文介绍了在Qt5环境下,通过双缓冲技术解决画布放大后的滚动条问题、图形重影以及放大旋转后无法正常绘图的问题。同时,讲解了信号与槽机制在画图工具框中的应用,以及Dock窗口的使用,提供了代码示例。
摘要由CSDN通过智能技术生成
昨晚又体验了一下 双缓冲画图,我们来了解一下双缓冲在这里的作用(但今天的例子也只是实现了其中的第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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值