qt QPainter学习

发布时间 2024-01-01 00:28:32作者: 红湿处
#include "mainwindow.h"
#include <qpainter.h>
#include <QDebug>
#include <QPainterPath>
#include <QtWinExtras>
#include <QRectF>
MainWindow::MainWindow(QWidget *parent)
    : QPushButton(parent)
{
    //实体列表 窗体背景透明
     //this->setWindowFlags(windowFlags() | Qt::FramelessWindowHint);//无边框
     //this->setAttribute(Qt::WA_TranslucentBackground, true);//窗体背景全透明


    QColor color(255, 0, 255,125);
    QPalette pal(palette());
    pal.setColor(QPalette::Window, color);
    setAutoFillBackground(true);
    setPalette(pal);

    this->resize(200,300);
    connect(this,&QPushButton::clicked,this,[&](){
        c+=2;
        qDebug()<<"23你好按钮"<<c;
    });

}

MainWindow::~MainWindow() {}

void MainWindow::paintEvent(QPaintEvent *event)
{
    // 0:绘制矩形和文字
    // 1:绘制椭圆
    // 2:画线
    // 3:画面
    switch(4){
    case 0:
    {
        QPainter painter(this);
        painter.setPen(QPen(Qt::darkYellow,2));  // 设置当前画笔的颜色,和画笔大小,单位像素
        QRect rect = QRect(20,20,100,50);        // 设置要绘制的矩形起始点位置,以及宽度和高度
        painter.drawRect(rect);                  // 使用当前设置的画笔设置矩形

        QFont font = this->font();  // 创建字体
        font.setPointSize(30);      // 设置字体大小,pix
        painter.setFont(font);      // 设置当前画家的字体
        painter.drawText(rect,Qt::AlignHCenter|Qt::TextWordWrap,"你好"); // Qt::AlignHCenter:居中对齐 ,Qt::TextWordWrap:文字换行
        painter.setPen(QPen(Qt::green,2));  // 重新设置画笔

        auto bRect = painter.boundingRect(rect,Qt::AlignHCenter|Qt::TextWordWrap,"世界"); // 返回绘制字体所需要的矩形(矩形信息)
        painter.drawRect(bRect);  //  绘制返回的矩形
    }
        break;
    case 1:
    {
        QPainter painter(this);
        painter.setRenderHint(QPainter::Antialiasing,true); // 如果启用为true,则在绘制器上设置给定的渲染提示;否则将清除渲染提示。(反锯齿,生效)
        painter.setPen(QPen(Qt::red,5));                    // 设置画笔
        painter.drawEllipse(painter.brushOrigin(),5,5);     // 绘制椭圆 ,painter.brushOrigin():返回当前设置的笔刷原点。绘制位于半径为rx(5)和ry(5)的中心的椭圆
        painter.translate(50,50);                           // 将坐标系平移给定的偏移量
        painter.drawEllipse(painter.brushOrigin(),5,5);
        painter.setBrushOrigin(100,100);                    // 将笔刷的原点设置为点(x,y)
        painter.drawEllipse(painter.brushOrigin(),5,5);
    }
        break;
    case 2:
    {
        auto rect = event->rect();       // 获取到当前控件的矩形信息
        QPainter painter(this);
        painter.setRenderHint(QPainter::Antialiasing,true);  // 开启抗锯齿
        painter.setPen(QPen(Qt::red,5));  // 设置画笔和画笔大小
        painter.setClipRect(rect.adjusted(20,20,-20,-20));  // 设置要裁剪的矩形区域
        painter.drawLine(rect.topLeft(),rect.bottomRight()); // 获取矩形的左上点坐标和右下点坐标,将其设置为要画的线的起始坐标。
    }
    break;
    case 3:
    {
        auto rect = event->rect();
        QPainter painter(this);
        painter.setRenderHint(QPainter::Antialiasing,true); // 设置抗锯齿
        painter.setBrush(QColor(32,78,100,60));// 设置笔刷颜色
        QPainterPath path;
        path.addRoundedRect(rect.adjusted(20,20,-20,-20),60,60); // 添加圆角矩形
        painter.setClipPath(path);
        painter.drawRect(rect);
    }
    break;
    case 4:
    {
        QImage origin("E:/Project/Qtstudy/00_painter/studyPainter/resource/arrow_pressed_top.png");

        QRect rect{0,0,this->width(),this->height()};
        QPainter painter(this);
        painter.drawImage(rect,origin);
    }
    default:
        break;
    }
}