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