QT画图功能

QT画图功能

每个QWidget都自带的功能,继承了QPainteDevice都可以使用QPainter来进行绘图。
画图需要调用paintEvent绘制事件,paintEvent事件时QWidget类自带的事件。
重写paintEvent事件。(重写事件:如果父类有某个方法,此时子类需要有一个跟父类同样方法名称的)
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
实例化对象写法

    //实例化QPainter painter(this);//相当于QPainter *painter = new QPainter(this);

画直线举例
(0,0)表示起点,(300,300)表示终点。

void Widget::paintEvent(QPaintEvent *event)
{//实例化  属于局部变量QPainter painter(this);//相当于QPainter *painter = new QPainter(this);//绘制线painter.drawLine(0,0,300,300);
}

设置渲染模式:使得平滑渲染

    //设置曲线的平滑度painter.setRenderHint(QPainter::Antialiasing,true);

绘制弧线
//30 30 表示开始绘制位置 100 100 表示绘制绘制范围宽高,3016表示起始弧度,14016表示跨越弧度
角度*16 = 弧度

    //绘制曲线(弧线)painter.drawArc(30,300,100,100,30*16,140*16);

绘制饼图

    //绘制饼图painter.drawPie(50,50,100,100,0,90*16);

绘制矩形

    //绘制矩形painter.drawRect(200,200,100,100);

绘制并填充
QBrush表示笔刷对象
QColor表示颜色对象

//填充painter.fillRect(100,100,100,100,QBrush(QColor(255,0,0)));

绘制文字

painter.drawText(300,210,"水平轴");
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
//添加绘制者头文件
#include <QPainter>#include<QString>
namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private:Ui::Widget *ui;//重写绘制事件  快捷键alt+enter 定义具体的事件void paintEvent(QPaintEvent *event);};#endif // WIDGET_H
#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);
}Widget::~Widget()
{delete ui;
}void Widget::paintEvent(QPaintEvent *event)
{//实例化  属于局部变量QPainter painter(this);//相当于QPainter *painter = new QPainter(this);//绘制原点 文字painter.drawText(10,210,"0");//绘制坐标轴  X轴painter.drawLine(10,200,310,200);//分割水X平轴for(int i = 2;i < 31;i++){painter.drawLine(10*i,195,10*i,200);if(i%4 == 0)//每4个点画一次{painter.drawText(10*i,210,QString::number(10*i));}}//水平X轴的坐标文字painter.drawText(310,210,"水平轴");//绘制坐标轴  Y轴painter.drawLine(10,200,10,10);//分割Y轴for(int i = 2;i < 20;i++){painter.drawLine(10,10*i,15,10*i);if(i%4 == 0)//每4个点画一次{painter.drawText(15,10*(19-i),QString::number(10*i));}}//y轴的坐标文字painter.drawText(10,10,"垂直轴");//生成随机数 产生0-190之间的随机整数int curx,cury,oldx,oldy;curx = 10;cury = qrand()%191;for(int i = 2;i < 30;i++){oldx = 10*i;oldy = qrand()%191;;painter.drawLine(curx,cury,oldx,oldy);curx = oldx;cury = oldy;//画点painter.drawPoint(QPoint(oldx,oldy));}}

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

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

相关文章

C++类和对象(下篇)

目录 一.再谈构造函数 二.static成员 三.友元 四.内部类 五. 再次理解类和对象 一.再谈构造函数 1.构造函数体赋值 在创建对象时&#xff0c;编译器通过调用构造函数&#xff0c;给对象中各个成员变量一个合适的初始值。 class Date { public:Date(int year, int month…

8.5 Springboot项目实战 Redis缓存热点数据

文章目录 前言一、缓存与数据库一致性二、Repository层 -- Cache Aside模式实操BookRepositoryBookRepositoryImpl2.1 查询2.2 修改2.3 删除2.4 扩展Mapper修改三、Service层调用修改四、测试前言 前两文我们讲解了如何在SpringBoot中整合Redis,接下来我们将进行

Linux C/C++下使用Lex/Yacc构建实现DBMS(Minisql)

DBMS&#xff08;数据库管理系统&#xff09;是一种用于管理和组织数据库的软件系统。它的重要性在于提供了一种有效地存储、管理和访问大量数据的方式。本文将深入探讨如何使用C语言、Lex&#xff08;词法分析器生成器&#xff09;和Yacc&#xff08;语法分析器生成器&#xf…

设计模式学习笔记 - 规范与重构 - 5.如何通过封装、抽象、模块化、中间层解耦代码?

前言 《规范与重构 - 1.什么情况下要重构&#xff1f;重构什么&#xff1f;又该如何重构&#xff1f;》讲过&#xff0c;重构可以分为大规模高层重构&#xff08;简称 “大型重构”&#xff09;和小规模低层次重构&#xff08;简称 “小型重构”&#xff09;。大型重构是对系统…

LTspice(14) Noise仿真

LTspice(14) Noise仿真 好久没有更新LTspice的教程了&#xff0c;大家想了没&#xff1f; 截止目前LTspice已经更新到24.0.9。界面发生了一些变化&#xff0c;但主要功能并不受影响&#xff0c;新的版本改了UI&#xff0c;找东西更加方便了&#xff0c;界面如下图1所示。 图1…

CSP初赛备考—汉字与运算

汉字 英文字符 英文字符的编码有两种:①ASCII标准码,7位(128个字符)②ASCII扩展吗,8位(256个字符) 中文字符 汉字分为两级:①一级汉字:3755个,按汉语拼音字母的次序排列。②二级汉字:3008个,按偏旁部首排列。 那么,怎么编码呢?要使用区位码和字形码等等。 区…

VMware虚拟机安装Ubuntu kylin22.04系统教程(附截图详细步骤)

一、版本信息 虚拟机产品&#xff1a;VMware Workstation 17 Pro 虚拟机版本&#xff1a;17.0.0 build-20800274 ISO映像文件&#xff1a;ubuntukylin-22.04-pro-amd64.iso 二、安装步骤 打开虚拟机&#xff0c;点击创建新的虚拟机&#xff1a; 选择自定义&#xff1a; 硬…

新雀优化算法NOA求解机器人栅格地图最短路径规划,可以自定义地图(提供MATLAB代码)

一、星雀优化算法 星雀优化算法(Nutcracker optimizer algorithm,NOA)由Mohamed Abdel-Basset等人于2023年提出&#xff0c;该算法模拟星雀的两种行为&#xff0c;即&#xff1a;在夏秋季节收集并储存食物&#xff0c;在春冬季节搜索食物的存储位置。CEC2005:星雀优化算法(Nut…

基于51单片机的定时器时钟设计[proteus仿真]

基于51单片机的定时器时钟设计[proteus仿真] 时钟设计检测系统这个题目算是课程设计和毕业设计中常见的题目了&#xff0c;本期是一个基于51单片机的定时器时钟设计 需要的源文件和程序的小伙伴可以关注公众号【阿目分享嵌入式】&#xff0c;赞赏任意文章 2&#xffe5;&…

搭建nacos集群,并通过nginx实现负载均衡

nacos、eureka、consul、zookeeper等都是常用的微服务注册中心&#xff0c;这篇文章详细介绍一下在Ubuntu操作系统上搭建一个nacos的集群&#xff0c;以及通过nginx的反向代理功能实现nacos的负载均衡。 目录 一、安装nacos 1、安装nacos 2、修改nacos配置文件 3、创建naco…

[C/C++]string类常用接口介绍及模拟实现string类

一&#xff1a;Cstring类的由来 在C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0c;但是这些库函数与字符串是分离开的&#xff0c;不太符合OOP的思想&#xff0c;而且底层空间需要用…

注意!!墙裂推荐几个好用的实用小工具!一定会用到的!

前言 在开发的世界里&#xff0c;面对各种挑战和问题时&#xff0c;拥有一套合适的工具箱至关重要。这不仅能提升我们的工作效率&#xff0c;还能让复杂的任务变得简单&#xff0c;甚至在解决棘手问题的同时&#xff0c;还能让我们的心情略微舒畅。众所周知&#xff0c;有用的…