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

基本绘图

新建项目

重新绘图事件

画基本图形

#include "widget.h"
#include "ui_widget.h"
#include <QPainter>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));                          // 画矩形
}

效果

写字

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

效果

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

#include "widget.h"
#include "ui_widget.h"
#include <QPainter>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), "好好学习,天天向上");}

效果

画刷,可以填充封闭的图案
#include "widget.h"
#include "ui_widget.h"
#include <QPainter>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), "好好学习,天天向上");}

效果

高级绘图

设置抗锯齿

    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));

效果

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

代码

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

效果

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

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

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});
}

效果

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

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

效果

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

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

所有代码

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic: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 <QPainter>
#include <QPushButton>
#include <QTimer>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);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/160349.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB ROS Toolbox 官网教程

系列文章目录 文章目录 系列文章目录前言一、ROS 2 入门1.1 ROS 2 术语1.2 启动 ROS 2 网络1.3 话题和服务质量策略1.4 消息1.5 从 ROS 2 网络断开连接1.6 DDS 和 RMW 实施 二、连接到 ROS 2 网络2.1 在默认域中创建 ROS 2 节点2.2 在不同域上创建 ROS 2 节点2.3 更改默认域 ID…

Leetcode—1588.所有奇数长度子数组的和【简单】

2023每日刷题&#xff08;十九&#xff09; Leetcode—1588.所有奇数长度子数组的和 直接法实现代码 int sumOddLengthSubarrays(int* arr, int arrSize){int i 1;int sum 0;int left 0, right;int k;int j 0;while(i < arrSize) {for(left 0; left < arrSize; lef…

虽然许多人表示对Windows 11的透明任务栏不满,但有时效果还是挺好的

Windows 11支持透明任务栏&#xff0c;这项功能可以在几秒钟内启用&#xff0c;但许多人表示他们对它的工作方式不满意。 在今天的指南中&#xff0c;我们将向你展示如何使用此功能&#xff0c;并通过一些技巧进一步自定义任务栏。 如何在Windows 11中使任务栏透明 使用个性…

FMC+DAM驱动LVGL刷屏

前提条件 使用FMC驱动LCD刷屏 LVGL移植 开启DMA 需要开启MEMTOMEMDMA。 开启MPU 有MPU时需要 使能I-cache D-cache时 使用DMA传输数据时要保证数据的完整行和准确性 修改代码 逻辑 等待DMA传输完成然后再刷屏。 修改 在DMA初始化函数中最后添加 注册DMA传输完成调用函…

音频修复增强软件iZotope RX 10 mac中文特点

iZotope RX 10 mac是一款音频修复和增强软件。 iZotope RX 10 mac主要特点 声音修复&#xff1a;iZotope RX 10可以去除不良噪音、杂音、吱吱声等&#xff0c;使音频变得更加清晰干净。 音频增强&#xff1a;iZotope RX 10支持对音频进行音量调节、均衡器、压缩器、限制器等处…

FreeRTOS-定时器\二值信号互斥信号\事件组

FreeRTOS整体知识框架可以参考下文: FreeRTOS整体知识框架 一. FreeRTOS定时器 FreeRTOS定时器 博文路径 FreeRTOS提供了一种软件定时器&#xff0c;用来快速实现一些周期性的操作&#xff0c;并且节约了硬件定时器。不过尽量还是不要做过多的操作&#xff0c;以免影响其他…

MySQL(8):聚合函数

聚合函数介绍 聚合函数&#xff1a; 对一组数据进行汇总的函数&#xff0c;输入的是一组数据的集合&#xff0c;输出的是单个值。 聚合函数类型&#xff1a;AVG(),SUM(),MAX(),MIN(),COUNT() AVG / SUM 只适用于数值类型的字段&#xff08;或变量&#xff09; SELECT AVG(…

verdi技巧分享--合并多个fsdb文件、统计信号边沿

文章目录 0 前言1 如何显示信号高位的02 统计信号的上升沿、下降沿3 合并信号4 将多个fsdb文件合并成一个 0 前言 分享几个这段时间学到的verdi操作 1 如何显示信号高位的0 这个可能对一些有强迫症的有帮助吧 nand相关的操作&#xff0c;有一些特定的cmd&#xff0c;比如 r…

小程序https证书

小程序通常需要与服务器进行数据交换&#xff0c;包括用户登录信息、个人资料、支付信息等敏感数据。如果不使用HTTPS&#xff0c;这些数据将以明文的方式在网络上传输&#xff0c;容易被恶意攻击者截获和窃取。HTTPS通过数据加密来解决这个问题&#xff0c;确保数据在传输过程…

0005Java安卓程序设计-ssm基于Android的网店系统

文章目录 **摘要**目录系统设计开发环境 编程技术交流、源码分享、模板分享、网课教程 &#x1f427;裙&#xff1a;776871563 摘要 随着Internet的发展&#xff0c;人们的日常生活已经离不开网络。未来人们的生活与工作将变得越来越数字化&#xff0c;网络化和电子化。网上管…

【软考中级】软件设计师-下午题

下午题 试题一 黑洞&#xff1a;加工有输入无输出 白洞(奇迹)&#xff1a;加工有输出无输入 灰洞&#xff1a;数据流输入的加工不足以产生输出 结构化语言&#xff1a; IF *** THEN ELSE IF *** THEN ******* END IF END IF 数据流的父子图平衡&#xff0c;如果父子图平衡就不…

人工智能基础_机器学习018_手写代码实现_MBGD小批量梯度下降---人工智能工作笔记0058

然后我们继续来看这里的小批量梯度下降,小批量梯度下降,其实就是 用少量的样本数据,进行梯度下降,上面是公式 然后我们来看代码 import numpy as np 导入数学计算包 #X,y创建数据集X=np.random.rand(100,1) x是100行1列 w,b=np.random.randint(1,10,size=2) 然后获取w和截距…