【QT】基本的绘图操作和高级绘图

基本绘图

新建项目

【QT】基本的绘图操作和高级绘图_第1张图片

重新绘图事件

【QT】基本的绘图操作和高级绘图_第2张图片

画基本图形

【QT】基本的绘图操作和高级绘图_第3张图片

#include "widget.h"
#include "ui_widget.h"
#include 

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

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

// 重写绘图事件
void Widget::paintEvent(QPaintEvent *event)
{
    // 创建画家
    // this表示绘图设备,往当前窗口画画
    QPainter painter(this);
    painter.drawLine(QPoint(0, 0), QPoint(100, 100));                 // 画线
    painter.drawEllipse(QPoint(100, 100), 50, 50);                    // 画圆(椭圆)
    painter.drawRect(QRect(20, 20, 50, 50));                          // 画矩形
}

效果

【QT】基本的绘图操作和高级绘图_第4张图片

写字

    // 写字
    painter.setFont(QFont("华文彩云", 20));         // 设置字体字号
    painter.drawText(QRect(0, 200, 200, 150), "好好学习,天天向上");

效果

【QT】基本的绘图操作和高级绘图_第5张图片

设置画笔颜色、宽度、风格

#include "widget.h"
#include "ui_widget.h"
#include 

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

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

// 重写绘图事件
void Widget::paintEvent(QPaintEvent *event)
{
    // 创建画家
    // this表示绘图设备,往当前窗口画画
    QPainter painter(this);

    // 指定画笔
    QPen pen(QColor(255, 0, 0));
    // 设置画笔的宽度
    pen.setWidth(3);        // 默认是1
    // 设置画笔风格
    pen.setStyle(Qt::DotLine);
    // 画家使用画笔
    painter.setPen(pen);

    painter.drawLine(QPoint(0, 0), QPoint(100, 100));                 // 画线
    painter.drawEllipse(QPoint(100, 100), 50, 50);                    // 画圆(椭圆)
    painter.drawRect(QRect(20, 20, 50, 50));                          // 画矩形


    // 写字
    painter.setFont(QFont("华文彩云", 20));         // 设置字体字号
    painter.drawText(QRect(0, 200, 200, 150), "好好学习,天天向上");

}

效果

【QT】基本的绘图操作和高级绘图_第6张图片

画刷,可以填充封闭的图案
#include "widget.h"
#include "ui_widget.h"
#include 

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

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

// 重写绘图事件
void Widget::paintEvent(QPaintEvent *event)
{
    // 创建画家
    // this表示绘图设备,往当前窗口画画
    QPainter painter(this);

    // 指定画笔
    QPen pen(QColor(255, 0, 0));
    // 设置画笔的宽度
    pen.setWidth(3);        // 默认是1
    // 设置画笔风格
    pen.setStyle(Qt::DotLine);
    // 画家使用画笔
    painter.setPen(pen);


    // 画刷,可以填充封闭的图案
    QBrush brush(Qt::cyan);         // 青色
    // 设置画刷风格
    brush.setStyle(Qt::Dense5Pattern);
    // 画家使用画刷
    painter.setBrush(brush);



    painter.drawLine(QPoint(0, 0), QPoint(100, 100));                 // 画线
    painter.drawEllipse(QPoint(100, 100), 50, 50);                    // 画圆(椭圆)
    painter.drawRect(QRect(20, 20, 50, 50));                          // 画矩形


    // 写字
    painter.setFont(QFont("华文彩云", 20));         // 设置字体字号
    painter.drawText(QRect(0, 200, 200, 150), "好好学习,天天向上");

}

效果

【QT】基本的绘图操作和高级绘图_第7张图片

高级绘图

设置抗锯齿

    painter.drawEllipse(QPoint(100, 100), 50, 50);          // 画圆

    // 设置抗锯齿
    painter.setRenderHint(QPainter::Antialiasing);
    painter.drawEllipse(QPoint(250, 100), 50, 50);          // 画圆

效果

【QT】基本的绘图操作和高级绘图_第8张图片

移动画家

    painter.drawRect(QRect(20, 20, 50, 50));
    // 移动画家
    painter.translate(100, 0);
    painter.save();                 // 保存
    painter.drawRect(QRect(20, 20, 50, 50));
    painter.translate(100, 0);
    painter.restore();              // 恢复到100处
    painter.drawRect(QRect(20, 20, 50, 50));

效果

【QT】基本的绘图操作和高级绘图_第9张图片

画成品图,导入资源:【QT】资源文件导入_复制其他项目中的文件到qt项目中_StudyWinter的博客-CSDN博客

【QT】基本的绘图操作和高级绘图_第10张图片

代码

    // 画成品的图案
    QPixmap pix;
    pix.load(":/Image/Luffy.png");
    painter.drawPixmap(0, 0, pix);

效果

【QT】基本的绘图操作和高级绘图_第11张图片

在UI文件中加pushbutton,点击button,图片移动。

加入成员变量记录坐标信息

【QT】基本的绘图操作和高级绘图_第12张图片

【QT】基本的绘图操作和高级绘图_第13张图片

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

    // 点击移动按钮,图片移动
    connect(ui->pushButton, &QPushButton::clicked, this, [=]() {
        posX += 10;
        // 重新画图,手动调用
        update();       // 自动调用paintEvent

    });
}

效果

【QT】基本的绘图操作和高级绘图_第14张图片

图片左边出去,可以从右边回来

【QT】基本的绘图操作和高级绘图_第15张图片

    // 画成品的图案
    QPixmap pix;
    pix.load(":/Image/Luffy.png");
    // 窗口的宽度
    if (posX > this->width()) {
        // 重置
        posX = 0 - pix.width();
    }
    painter.drawPixmap(posX, 0, pix);

效果

【QT】基本的绘图操作和高级绘图_第16张图片

图片自动移动,利用定时器

【QT】基本的绘图操作和高级绘图_第17张图片

    // 图片自动移动
    QTimer* time = new QTimer(this);
    time->start(10);
    connect(time, &QTimer::timeout, this, [=]() {
        posX++;
        update();
    });

所有代码

【QT】基本的绘图操作和高级绘图_第18张图片

#ifndef WIDGET_H
#define WIDGET_H

#include 

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

    // 重写绘图事件
    void paintEvent(QPaintEvent *event);

    // 记录坐标
    int posX;

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include 
#include 
#include 

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

    // 点击移动按钮,图片移动
    connect(ui->pushButton, &QPushButton::clicked, this, [=]() {
        posX += 10;
        // 重新画图,手动调用
        update();       // 自动调用paintEvent

    });


    // 图片自动移动
    QTimer* time = new QTimer(this);
    time->start(10);
    connect(time, &QTimer::timeout, this, [=]() {
        posX++;
        update();
    });
}

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

// 重写绘图事件
void Widget::paintEvent(QPaintEvent *event)
{
    // 创建画家
    // this表示绘图设备,往当前窗口画画
    QPainter painter(this);

    /***************************************基本绘图**************************************/

//    // 指定画笔
//    QPen pen(QColor(255, 0, 0));
//    // 设置画笔的宽度
//    pen.setWidth(3);        // 默认是1
//    // 设置画笔风格
//    pen.setStyle(Qt::DotLine);
//    // 画家使用画笔
//    painter.setPen(pen);


//    // 画刷,可以填充封闭的图案
//    QBrush brush(Qt::cyan);         // 青色
//    // 设置画刷风格
//    brush.setStyle(Qt::Dense5Pattern);
//    // 画家使用画刷
//    painter.setBrush(brush);

//    painter.drawLine(QPoint(0, 0), QPoint(100, 100));                 // 画线
//    painter.drawEllipse(QPoint(100, 100), 50, 50);                    // 画圆(椭圆)
//    painter.drawRect(QRect(20, 20, 50, 50));                          // 画矩形


//    // 写字
//    painter.setFont(QFont("华文彩云", 20));         // 设置字体字号
//    painter.drawText(QRect(0, 200, 200, 150), "好好学习,天天向上");



    /*****************************************高级绘图****************************************/
//    painter.drawEllipse(QPoint(100, 100), 50, 50);          // 画圆

//    // 设置抗锯齿
//    painter.setRenderHint(QPainter::Antialiasing);
//    painter.drawEllipse(QPoint(250, 100), 50, 50);          // 画圆

//    painter.drawRect(QRect(20, 20, 50, 50));
//    // 移动画家
//    painter.translate(100, 0);
//    painter.save();                 // 保存
//    painter.drawRect(QRect(20, 20, 50, 50));
//    painter.translate(100, 0);
//    painter.restore();              // 恢复到100处
//    painter.drawRect(QRect(20, 20, 50, 50));


    // 画成品的图案
    QPixmap pix;
    pix.load(":/Image/Luffy.png");
    // 窗口的宽度
    if (posX > this->width()) {
        // 重置
        posX = 0 - pix.width();
    }
    painter.drawPixmap(posX, 0, pix);




}

你可能感兴趣的:(QT,qt,keep,studying)