在一的基础上改造:

.h 文件

#pragma once

#include <QtWidgets/QWidget>
#include "ui_xuexi.h" #include "QMouseEvent"
#include "QKeyEvent"
#include "QPainter"
#include "QPushButton" class xuexi : public QWidget
{
Q_OBJECT public:
xuexi(QWidget *parent = Q_NULLPTR); void mousePressEvent(QMouseEvent*e); // 按下
void mouseMoveEvent(QMouseEvent*e); // 移动
void mouseReleaseRvent(QMouseEvent*e); // 释放 void paintEvent(QPaintEvent* ); public slots:
void zoomIn(); // 放大 private:
Ui::xuexiClass ui; QPixmap pix;
QPoint lastPoint;
QPoint endPoint; int scale; // 放大倍数
QPushButton* pushbutton;
};

.cpp 文件

#include "xuexi.h"

xuexi::xuexi(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this); resize(600, 500);
pix = QPixmap(200, 200);
pix.fill(Qt::white); scale = 1;
pushbutton = new QPushButton("zoomIn", this);
pushbutton->move(500, 450);
connect(pushbutton, SIGNAL(clicked()), this, SLOT(zoomIn()));
} void xuexi::mousePressEvent(QMouseEvent*e)
{
if (e->button() == Qt::LeftButton)
{
lastPoint = e->pos();
}
} void xuexi::mouseMoveEvent(QMouseEvent*e)
{
if (e->buttons() == Qt::LeftButton)
{
endPoint = e->pos();
update();
}
} void xuexi::mouseReleaseRvent(QMouseEvent* e)
{
if (e->button() == Qt::LeftButton)
{
endPoint = e->pos();
update();
}
} void xuexi::paintEvent(QPaintEvent*)
{
// 第一种:效果差点
/*QPainter pp(&pix);
pp.drawLine(lastPoint / scale, endPoint / scale);
lastPoint = endPoint; QPainter painter(this);
painter.scale(scale, scale);
painter.drawPixmap(0, 0, pix);*/ // 第二种:效果更好
if (scale != 1)
{
QPixmap copyPix(pix.size() * scale);
QPainter pter(&copyPix);
pter.scale(scale, scale);
pter.drawPixmap(0, 0, pix);
pix = copyPix;
scale = 1;
}
QPainter pp(&pix);
pp.scale(scale, scale);
pp.drawLine(lastPoint / scale, endPoint / scale);
lastPoint = endPoint; QPainter painter(this);
painter.drawPixmap(0, 0, pix);
} void xuexi::zoomIn()
{
scale *= 2;
update();
}

这里的放大,写了两种实现方法:

方法一:将涂鸦后的图片放大,这样虽然可以实现,但是放大后,像素个数就表少了,画质就变差了,效果不是很好。

方法二:是将画布放大,这样像素个数不会变少,画质就高些,效果更好

Qt 实现涂鸦板二:实现放大功能的更多相关文章

  1. HTML5实现涂鸦板

    原文:HTML5实现涂鸦板 最近闲的,看了看html5,强大的绘图功能让我惊奇,于是,写了个小玩意---涂鸦板,能实现功能有:画画,改色,调整画笔大小 html5的绘图可以分为点,线,面,圆,图片等, ...

  2. SNF开发平台WinForm-平板拍照及扫描二维码功能

    在我们做项目的时候,经常会有移动平板处理检验,审核等,方便移动办公.这时就需要在现场拍照上传问题,把当场问题进行上传,也有已经拍完照的图片或加工过的图片进行上传.还有在车间现场一体机,工控机 这种产物 ...

  3. Android应用开发实例篇(1)-----简易涂鸦板

    链接地址:http://www.cnblogs.com/lknlfy/archive/2012/03/03/2378328.html 一.概述 这次要做一个简单的涂鸦板应用,以前在Qt上实现过,突然想 ...

  4. 图片放大功能插件及jquery.extend函数理解

    前端时间,产品提出社区评论中的图片需要有放大功能.感觉可以共用,所以就想整合一个插件,过程中也借鉴了一些例子. 分析下自己的代码思路: var scaleImg = function(opts) { ...

  5. iOS_Quartz2D之涂鸦板

    响应者对象:继承了UIResponder的对象 触摸事件:一根或多根手指: 开始触摸: - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent ...

  6. 重新想象 Windows 8 Store Apps (51) - 输入: 涂鸦板

    [源码下载] 重新想象 Windows 8 Store Apps (51) - 输入: 涂鸦板 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 涂鸦板 通过 Poin ...

  7. 实现简单的手写涂鸦板(demo源码)

    在一些软件系统中,需要用到手写涂鸦的功能,然后可以将涂鸦的结果保存为图片,并可以将"真迹"通过网络发送给对方.这种手写涂鸦功能是如何实现的了?最直接的,我们可以使用Windows提 ...

  8. QT开发(十二)——QT事件处理机制

    一.QT事件简介 QT程序是事件驱动的, 程序的每个动作都是由内部某个事件所触发.QT事件的发生和处理成为程序运行的主线,存在于程序整个生命周期. 常见的QT事件类型如下: 键盘事件: 按键按下和松开 ...

  9. PPAPI+Skia实现的涂鸦板

    在PPAPI插件中使用Skia画图介绍了怎样在PPAPI中使用Skia,文末说回头要提供一个简单的涂鸦板插件,这次我来兑现承诺了. foruok原创,关注微信订阅号"程序视界"可联 ...

  10. Android二维码功能实现,在程序内嵌入ZXing项目

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9526247 最近二维码真是越来越火了,随便电视上.网络上.商场里,到处都是二维码. ...

随机推荐

  1. 【Azure API 管理】Azure API Management通过请求中的Path来限定其被访问的频率(如1秒一次)

    问题描述 Azure API Management 是否可以通过请求中的Path来限定其被访问的频率? 在系统Request中发现某个Path 在短时间内被频繁的调用,影响了后台服务的性能及安全,所以 ...

  2. Nebula Graph 源码解读系列 | Vol.05 Scheduler 和 Executor 两兄弟

    本文首发于 Nebula Graph Community 公众号 上篇我们讲述了 Query Engine Optimizer 部分的内容,在本文我们讲解下 Query Engine 剩下的 Sche ...

  3. C++ 多线程笔记1 线程的创建

    C++ 多线程笔记1 线程的创建 里面代码会用到的头文件 #include <iostream> #include <string> #include <memory&g ...

  4. win10图标异常显示空白,WiFi图标消失等情况解决方案

    出现WiFi图标异常不显示,但是网络却正常,以下为解决方案: Win + R 快捷键调出运行框,输入%USERPROFILE%\AppData\Local,找到IconCache.db文件并删除,之后 ...

  5. Dash 2.16版本新特性介绍

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/dash-master 大家好我是费老师,几天前Dash发布了其2.16.0版本,随后在修复了一些潜在 ...

  6. 工具 --- IL指令集解释

    引言 汇总一下所有的 .NET IL 指令,以及它们的名称.操作码值.堆栈转换行为和描述. 作为反编译IL代码时的查询字典. IL 指令集列表 以下内容来自微软官方文档,通过百度翻译API翻译为中文. ...

  7. Apollo获取配置异常:Load config failed, will retry in 1 SECONDS

    一.现象 apollo开启秘钥,服务获取配置参数需要启动参数中添加:jvm参数-Dapollo.accesskey.secret=XXX.日志如下: 二.解决方案 应用服务器时间异常,重置应用服务器时 ...

  8. Java解析JSON数据,有回车符\n时解析报错

    一.问题由来 测试人员最近在测试时,后台日志一直抱错,大致意思是JSON数据解析错误,错误信息如下: 二.问题分析 去查看代码时,发现异常信息是这里抛出来的,解析时使用的是json-lib这个包中的方 ...

  9. VS Code Snippet Generator 插件 生成 vscode代码片段

    VS Code Snippet Generator 插件 生成 vscode代码片段

  10. Java/Kotlin 密码复杂规则校验

    原文地址: Java/Kotlin 密码复杂度校验 | Stars-One的杂货小窝 每次有那个密码复杂校验,不会写正则表达式,每次都去搜,但有时候校验的条件又是奇奇怪怪的,百度都搜不到 找到了个代码 ...