一.第一阶段


发现上述图片没有显示全!!!!!

二.第二阶段

设置宽高比,平滑转换

运行结果(GIF动图):

发现上述图片在数次缩放后会产生失真!!!!!

三.第三阶段

为了避免图像缩放过程中产生失真,修改代码(去掉赋值)

运行结果(GIF动图):

四.第四阶段

使用绘制图片的另一个类<QImage>


运行结果(GIF动图):

五.第五阶段(使用的是QPixmap)

运行结果(GIF动图):

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void paintEvent(QPaintEvent *);
public slots:void drawPixmapSlot();
private:QPixmap*     _image->save("E:/image.png");//保存绘制出来的图像到E盘;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include<QPainter>
#include<QPushButton>
#include<QThread>
#include<QDebug>
Widget::Widget(QWidget *parent): QWidget(parent)
{this->resize(640,480);_pixmap=new QPixmap(this->size());//会根据硬件设备进行优化_pixmap->fill(QColor("#00000000"));QPushButton* pb=new QPushButton("pb",this);connect(pb,SIGNAL(clicked()),this,SLOT(drawPixmapSlot()));
}void Widget::drawPixmapSlot()
{QPainter painter;painter.begin(_pixmap);painter.setPen(QPen(Qt::red));painter.setBrush(QBrush(Qt::blue));painter.drawLine(0,0,100,100);//QThread::sleep(5);painter.drawRect(100,100,100,100);painter.drawPixmap(200,200,QPixmap("C:/Users/xiaowen/Desktop/小鸟游六花.png").scaled(300,300,Qt::IgnoreAspectRatio,Qt::SmoothTransformation));painter.save();painter.restore();painter.end();this->update();_pixmap->save("E:/image.png");//保存绘制出来的图像到E盘}void Widget::paintEvent(QPaintEvent *)
{qDebug()<<__FUNCTION__<<endl;QPainter painter;painter.begin(this);painter.drawPixmap(0,0,*_pixmap);painter.end();
}Widget::~Widget()
{delete _pixmap;
}

六.第六阶段(使用QImage来实现五)

运行结果(GIF动图):

E盘:

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void paintEvent(QPaintEvent *);
public slots:void drawImageSlot();
private:QImage* _image;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include<QPainter>
#include<QPushButton>
#include<QThread>
#include<QDebug>
Widget::Widget(QWidget *parent): QWidget(parent)
{this->resize(640,480);_image=new QImage(this->size(),QImage::Format_ARGB32_Premultiplied);QPushButton* pb=new QPushButton("pb",this);connect(pb,SIGNAL(clicked()),this,SLOT(drawImageSlot()));
}void Widget::drawImageSlot()
{QPainter painter;painter.begin(_image);painter.setPen(QPen(Qt::red));painter.setBrush(QBrush(Qt::blue));painter.drawLine(0,0,100,100);//QThread::sleep(5);painter.drawRect(100,100,100,100);painter.drawImage(200,200,QImage("C:/Users/xiaowen/Desktop/小鸟游六花.png").scaled(300,300,Qt::IgnoreAspectRatio,Qt::SmoothTransformation));painter.save();painter.restore();painter.end();_image->save("E:/image.png");//保存绘制出来的图像到E盘this->update();}void Widget::paintEvent(QPaintEvent *)
{qDebug()<<__FUNCTION__<<endl;QPainter painter;painter.begin(this);painter.drawImage(0,0,*_image);painter.end();
}Widget::~Widget()
{delete _image;
}

七.附:代码

xiaowen_QT_day26

QT       += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0SOURCES += \main.cpp \widget.cppHEADERS += \widget.h# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void paintEvent(QPaintEvent *);
private:QPixmap* _pixmap;QImage* _image;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include<QPainter>
#include<QPixmap>
#include<QImage>
Widget::Widget(QWidget *parent): QWidget(parent)
{_pixmap=new QPixmap("C:/Users/xiaowen/Desktop/小鸟游六花.png");//会根据硬件设备进行优化_image=new QImage("C:/Users/xiaowen/Desktop/小鸟游六花2.png");//提供像素级别的图像处理
}void Widget::paintEvent(QPaintEvent *)
{QPainter painter;painter.begin(this);//painter.drawPixmap(0,0,_pixmap->scaled(this->width(),this->height(),//                                     Qt::KeepAspectRatioByExpanding,Qt::SmoothTransformation));painter.drawImage(0,0,_image->scaled(this->width(),this->height(),Qt::KeepAspectRatioByExpanding,Qt::SmoothTransformation));painter.end();
}Widget::~Widget()
{delete _pixmap;
}

main.cpp

#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

QT每日一练day26:绘制图片相关推荐

  1. 【Qt】2D绘图之绘制图片

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 简单绘制图片 04. 平移图片 05. 缩放图片 06. 旋转图片 07. 扭曲图片 08. 附录 01. 概述 Qt提供 ...

  2. QT每日一练day4:ubuntu中使用QT

    (本文主要是为了说明QT的跨平台特性)   一.安装QT sudo apt-get install qt5-default qtcreator cmake 二.打开QT 可以点击图标或命令行方式: 三 ...

  3. QT每日一练day1:第一个程序

    参考博文:Qt常见类.窗口类继承关系树图 QT每日一练(1):第一个程序 最终效果(GIF动图): step1: step2: step3: step4: step5: step6: step7: s ...

  4. QT每日一练day27:绘制不规则窗体

    注:本文本来应该是以一个不规则的图片作为历程的,,忘记了!!!!     一.第一阶段:隐藏窗体框架 运行结果(GIF动图): widget.cpp 二.第二阶段:将窗口设置为透明 运行结果(GIF动 ...

  5. QT每日一练day24:绘画事件

    一.第一阶段 设置线条粗细 二.第二阶段:设置笔的样式 如:虚线 三.第三阶段:绘制矩形 四.第四阶段:设置颜色 轮廓颜色 笔刷颜色 笔刷样式 五.第五阶段:绘制其他形状图像和文字 六.第六阶段:图像 ...

  6. QT每日一练day29:QT中的多线程探究

    一.未使用多线程,则w0先运行完后,w1才开始运行 运行结果(GIF动图): main.cpp xiaowen_QT_day29.pro QT+=widgets SOURCES += \main.cp ...

  7. QT每日一练day25:触发绘画事件

    运行结果(GIF动图): widget.cpp 附代码: xiaowen_QT_day25.pro QT += core guigreaterThan(QT_MAJOR_VERSION, 4): QT ...

  8. QT每日一练day23:鼠标进入与离开事件

    运行结果(GIF动图): xiaowen_QT_day23.pro QT += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFI ...

  9. QT每日一练day22:键盘事件

    一.第一阶段--键盘按键按下事件 运行结果(GIF动图): xiaowen_QT_day22.pro QT += core guigreaterThan(QT_MAJOR_VERSION, 4): Q ...

最新文章

  1. objective-c如何在linux下进入Modern模式
  2. Codechef REBXOR HYSBZ - 4260(01字典树+区间异或最大)
  3. [html] 你知道微信端的浏览器内核是什么吗?
  4. 升级步骤linux_开发人员福音,在win10系统上安装linux子系统
  5. 命名空间中不存在名称_原木定制中不开裂的木材真的存在吗?
  6. Java_基础—用LinkedList模拟栈数据结构的集合并测试
  7. 学习 jQuery -2 document 对象的 ready 事件
  8. 前端开发者必备google插件
  9. 绿洲因涉嫌抄袭下架;Facebook 泄露 4.19 亿条用户数据;Go 1.13 发布 | 极客头条...
  10. Mybatis传递多个参数
  11. python中面向对象的ui_Python面向对象和图形用户界面(一)---- 面向对象
  12. 奇怪的ISA服务停止故障
  13. 国内四大炒股软件APP 全面技术解析
  14. 单龙芯3A3000-7A1000PMON研究学习-(1)硬件原理图
  15. 图像特征提取:Sobel边缘检测
  16. Flutter实战之网络请求框架Dio入门使用
  17. Instant Neural Graphics Primitives with a Multiresolution Hash Encoding 翻译
  18. 磁盘阵列是什么,主要做什么用?
  19. Linux内核中的IPSEC实现(3) ---转载
  20. 史上最详细LRW数据集、LRW-1000数据集、LRS2数据集、LRS3-TED数据集、OuluVS2数据集介绍

热门文章

  1. Cron 触发器及相关内容 (第二部分)
  2. java abstractlist_Java集合类源码解析:AbstractList
  3. anconda设置镜像源_管理2000+Docker镜像,Kolla是如何做到的
  4. delphi中griddata控件写入float数值_年中巨献!明道云发布多项重磅功能
  5. 基于Python+Django的企业人事管理系统
  6. 基于JAVA+SpringBoot+Mybatis+MYSQL的在线论坛管理系统
  7. 虚拟机 ubuntu10.04 安装 Mercury MW150U 无线网卡(AR9271芯片组)
  8. C# 给自己写的软件,加注册码功能。
  9. GridView控件日期格式化
  10. c++删除数组中重复元素_leetcode 数组中重复的数字