Qt-绘制多边形、椭圆、多条直线

1、说明

所有的绘图操作是在绘图事件中进行。
mainwindow.h

cpp 复制代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    //重写虚函数
   virtual void paintEvent(QPaintEvent *event);
private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainwindow.c

cpp 复制代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QPainter>


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

    //设置窗口固定大小(X轴,Y轴)
    this->resize(1800,1000);
}
void MainWindow::paintEvent(QPaintEvent *event)
{

}

2、绘制多个点

cpp 复制代码
   //定义画家 ,需要一个画板(QPaintDevice)对象来构造  QPainter(QPaintDevice *)
    QPainter painter(this);
    //反锯齿设置
    painter.setRenderHint(QPainter::Antialiasing);
    /*------------1、绘制一个点函数-----------*/
    //定义画笔 15是画笔的粗细
    QPen pen( QBrush( Qt::red) , 15);
    //把画笔给画家
    painter.setPen(pen);
    //开始画点
    painter.drawPoint(QPoint( 0,0));
    //绘制两个点
    painter.drawPoint(QPoint( 100,100));
    /*------------2、绘制多个点函数,定义函数-----------*/
    //画多个点 定义的一个数组
    //定义画笔 15是画笔的粗细 设置为蓝色
    pen.setColor(Qt::blue);
    //把画笔给画家
    painter.setPen(pen);
    QPoint pts[]={  QPoint( 200,200),QPoint( 300,300) };
    painter.drawPoints(pts,2);//绘制多个点函数

3、绘制多条直线

cpp 复制代码
/*------------3、方式二:绘制一条直线方式一-----------*/

    QPen pen1( QBrush( Qt::red) , 15);
    pen1.setColor(Qt::green);
    //修改画笔的粗细
    pen1.setWidth(3);
    //重新设置画笔 画笔交给画家 替换画家手中原来的画笔 **重要**
    painter.setPen(pen1);

    //画直线 两点确定一条直线
    painter.drawLine(QPoint( 200,200),QPoint( 300,300)  );
   /*------------4、绘制多条直线,定义数组多用,重要-----------*/
    pen1.setColor(Qt::blue);
    painter.setPen(pen1);        //替换画家手中原来的画笔 **重要**
    QLine line(400,400,  500,500);
    QLine line2(600,600, 700,700);
    QLine lines[] ={ line, line2};
    //画多条线 将多条画线交给画家 替换原来的画线
    painter.drawLines(lines,2  );

4、绘制椭圆

cpp 复制代码
    /*------------5、绘制椭圆-----------*/
    //绘制椭圆代码 矩形圆心坐标(200,100) 长轴50 短轴20
    painter.drawEllipse(200,100,50,20);

5、绘制多边形

此处绘制的多边形会形成闭合。

cpp 复制代码
  /*------------6、绘制多边形-----------*/
    QPolygon pts;
    //3个点, (32,0) (44,0) (38,50)
    pts.setPoints(3, 32 ,0 , 44, 0,38,50);

    //设置画笔与画刷 画笔颜色 填充颜色
    //    painter.setPen(QPen(Qt::white,0.5));
    //    painter.setBrush( QColor("#FF4500") );
    painter.drawPolygon(pts);

6、绘制多条直线

同时绘制多条直线。

cpp 复制代码
 /*------------6、绘制多条直线-----------*/
    QLineF line3(43.0576+400,-468.5811+800,  357.5507+400,-557.6556+800);
    QLineF line4(47.6494+410,-467.0754+800,  363.1472+410,-556.4345+800);

    QLineF _lines[] ={ line3, line4};
    //画多条线 将多条画线交给画家 替换原来的画线
    painter.drawLines(_lines,2);
相关推荐
彧azz7 小时前
图的存储结构详解:邻接矩阵的原理、实现与应用
开发语言·数据结构·学习·php
嵌入式学习菌7 小时前
Modbus‑RTU 数据类型分析
开发语言·单片机·bug
kaixin_learn_qt_ing8 小时前
【银河麒麟下】 安装达梦数据库 + 使用Qt访问达梦数据库
qt
mengzhi啊8 小时前
缓存类CacheDataManager把临时数据存入json。做成插件·
qt·缓存·json
matlab代码8 小时前
基于matlab数字图像处理的指纹识别系统【源码68期】
开发语言·matlab
matlab代码8 小时前
基于matlab的水果识别系统(苹果香蕉菠萝梨桃子)【源码65期】
开发语言·matlab
wuyk5559 小时前
从零吃透 MQTT 通信|第 8 章 FreeRTOS 多任务架构下 MQTT 工程架构,任务拆分、队列解耦、临界区保护
c语言·开发语言·stm32·学习·架构
weixin199701080169 小时前
[特殊字符]《跨境二手ERP对接Back Market:标准化API + 7~10工作日技术合规审核实录》(附Python源码)
开发语言·python·pandas
尘客-追梦9 小时前
Day 01:插件化之前,先看清 ABI 这堵墙
开发语言·c++·qt
持敬chijing10 小时前
Python-数据类型-列表
开发语言·python·青少年编程