Qt笔记——绘图(QBitmap,QPixmap,QImage,QPicture)

摘要:
QWidget(父级);Widget){ui->//p.drawPixmap(rect();QPixmap(“../Image/bk.png”);Dense1Pattern);p.drawLine(50;受保护;私有;ui;#include&lt:QWidget(父级);Widget){ui-&gt:~Widget(){delete;
  • QPainter绘图
    • 重写绘图事件,虚函数
    • 如果窗口绘图,必须放在绘图事件里实现
    • 绘图事件内部自动调用,窗口需要重绘的时候,状态改变
  • 绘图设备(QPixmap,QImage,QBitmap,QPicture)
    • QPixmap图片背景透明,针对屏幕进行优化了,和平台相关,不能对图片进行修改
    • QImage 和平台无关,可以对图片进行修改,在线程中绘图
    • QPicture 保存绘图 的状态(二进制文件)
    • pixmap.save("../pixmap.png"); 保存图片
    • setWindowFlags(Qt::FramelessWindowHint | windowFlags());去除边框
    • setAttribute(Qt::WA_TranslucentBackground);设置透明

QPainter

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

protected:
    void paintEvent(QPaintEvent *event);

private slots:
    void on_pushButton_clicked();

private:
    Ui::Widget *ui;
    int x=0;
};

#endif // WIDGET_H

  

#include "widget.h"
#include "ui_widget.h"
#include <QPainter>
#include <QPen>
#include <QBrush>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::paintEvent(QPaintEvent *event)
{
    //QPainter p(this);
    QPainter p;//创建画家对象
    p.begin(this);//指定当前窗口为绘图设备
    //画背景图
    //p.drawPixmap(0,0, width(), height(), QPixmap("../Image/bk.png"));
    //p.drawPixmap(rect(),QPixmap("../Image/bk.png"));

    //定义画笔
    QPen pen;
    pen.setWidth(5);//设置线宽
    pen.setColor(QColor(124,123,0));//rgb
    pen.setStyle(Qt::DashDotDotLine);

    QBrush brush;
    brush.setColor(Qt::red);
    brush.setStyle(Qt::Dense1Pattern);

    //p.setPen(pen);
    p.setBrush(brush);
    //画直线
    p.drawLine(50,50,150,50);
    p.drawLine(50, 50,50,150 );

    //画矩形
    p.drawRect(x,150,100,50);

    p.drawEllipse(QPoint(150,150),25,50);

    p.drawPixmap(x,180,80,80,QPixmap("../Image/face.png"));

    p.end();
}

void Widget::on_pushButton_clicked()
{
    x += 20;
    if(x>width())
    {
        x = 0;
    }
    update();
}

 QBitmap

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

protected:
    void paintEvent(QPaintEvent *event);

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

  

#include "widget.h"
#include "ui_widget.h"
#include <QPainter>
#include <QBitmap>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter p(this);
    //QPixmap图片背景透明
    p.drawPixmap(0,0,QPixmap("../Image/butterfly.png"));
    //QBitmap
    p.drawPixmap(200,0, QBitmap("../Image/butterfly.png"));
    //QPixmap 图片背景白色
    QPixmap pixmap;
    pixmap.load("../Image/butterfly1.png");

}

 QPixmap

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

  

#include "widget.h"
#include "ui_widget.h"
#include <QPainter>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    QPixmap pixmap(400, 300);
    QPainter p(&pixmap);
    p.fillRect(0,0,400,300,QBrush(Qt::white));

    pixmap.fill(Qt::white);
    p.drawPixmap(0,0,80,80,QPixmap("../Image/face.png"));

    //保存图片
    pixmap.save("../pixmap.png");
}

Widget::~Widget()
{
    delete ui;
}

 QImage

#include "widget.h"
#include "ui_widget.h"
#include <QPainter>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    QImage image(400,300,QImage::Format_ARGB32);
    QPainter p;
    p.begin(&image);

    p.drawLine(50,50,100,100);

    for(int i=0;i<50;i++)
    {
        for(int j=0;j<50;j++)
        {
            image.setPixel(QPoint(i,j),qRgb(0,255,0));

        }
    }
    p.end();

    image.save("../image.png");
}

Widget::~Widget()
{
    delete ui;
}

QPicture

#include "widget.h"
#include "ui_widget.h"
#include <QPainter>
#include <QPicture>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    QPicture picture;
    QPainter p;
    p.begin(&picture);
    p.drawLine(50,50,100,100);
    p.end();

    picture.save("../picture.png");
}

Widget::~Widget()
{
    delete ui;
}

void Widget::paintEvent(QPaintEvent *event)
{
//    QPicture pic;
//    pic.load("../picture.png");
    QPainter p(this);
//    p.drawPicture(0,0,pic);

    QPixmap pixmap;
    pixmap.load("../Image/face.png");
    QImage tempImage = pixmap.toImage();
    p.drawImage(0,0, tempImage);

    QImage image;
    image.load("../Image/face.png");
    QPixmap tempPixmap = QPixmap::fromImage(image);
}  

窗口透明

#include "widget.h"
#include "ui_widget.h"
#include <QPainter>
#include <QMouseEvent>
#include <QDebug>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    setWindowFlags(Qt::FramelessWindowHint | windowFlags());

    setAttribute(Qt::WA_TranslucentBackground);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter p(this);
    p.drawLine(50,50,100,100);
}

void Widget::mousePressEvent(QMouseEvent *event)
{
    if(event->button() == Qt::RightButton)
    {
     close();
     qDebug()<<"close";
    }
    else if(event->button() == Qt::LeftButton)
    {
        p = event->globalPos() - this->frameGeometry().topLeft();
        qDebug()<<"left";
    }
}

void Widget::mouseMoveEvent(QMouseEvent *event)
{
    if(event->button() & Qt::LeftButton)
    {
            move(event->globalPos()-p);
    }
}

  

 

 

免责声明:文章转载自《Qt笔记——绘图(QBitmap,QPixmap,QImage,QPicture)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇清除页面广告?身为前端,自己做一款简易的chrome扩展吧Win32汇编环境搭建教程(MASM32 SDK)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

H5_0010:JS动态创建CSS,并向CSS中传入参数值

1,在html中定义style 2,js中创建css,并添加进入head标签style中 !function(e, t, i) { n.classList && n.classList.add("fill-mode-" + e); var s = "@media screen and (min-aspect-ratio: " + t +...

字典树的使用(匹配子串)

题目: 现有一个小写英文字母组成的字符串s和一个包含较短小写英文字符串的数组p,请设计一个高效算法,对于p中的每一个较短字符串,判断其是否为s的子串。 给定一个string数组p和它的大小n,同时给定string s,为母串,请返回一个bool数组,每个元素代表p中的对应字符串是否为s的子串。 保证p中的串长度小于等于8,且p中的串的个数小于等于500,同...

《自拍教程45》Python adb实时监控Logcat日志

接上一篇:adb命令_一键截取logcat日志, 有一天, 系统稳定性开发负责人找到我,希望我能在跑android 系统monkey的时候, 实时监控logcat的输出,如果一旦发现“java.lang.NullPointerException"空指针异常, 则立刻用adb bugreport命令导出当时log压缩包出来。 准备阶段 adb logcat...

pipenv@python3.8 install tensorflow

    普通的pipenv install pipenv install tensorflow Courtesy Notice: Pipenv found itself running within a virtual environment, so it will automatically use that environme...

一个简单的MySQL数据库同步脚本

Talk is cheap,show you code. 1 mysqldump -h[remoteHost] -u[username] -p[password] -P[port] --databases [databasename1] [databasename2] > [D:mysqlsync emp.sql] 2 echo "备份完成"; 3...

Qt 事件总结(鼠标、键盘) QMouseEvent、QKeyEvent

Qt 程序需要在main()函数创建一个QCoreApplication对象,然后调用它的exec()函数。这个函数就是开始 Qt 的事件循环。在执行 exec()函数之后,程序将进入事件循环来监听应用程序的事件。当事件发生时,Qt 将创建一个事件对象。Qt 中所有事件类都继承于 QEvent。在事件对象创建完毕后,Qt 将这个事件对象传递给QObject...