#include "widget.h"
#include "ui_widget.h"
#include <QPainter>
#include <QPixmap>
#include <QLabel>
#pragma execution_character_set("utf-8")
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
nonPaintEvent();
}
Widget::~Widget()
{
delete ui;
}
//void Widget::paintEvent(QPaintEvent *)
//{
// //开始绘画
// painter.begin(ui->label);//QPainter 只能在当前类中执行绘制操作,如需在子控件中绘图,需要重写子控件paintEvent函数。
painter.begin(this);
// QPainter painter(this);
// painter.setRenderHint(QPainter::Antialiasing, true);//消锯齿
// 设置画笔相关:方法一
QPen pen;
pen.setColor(Qt::red);
pen.setWidth(4);
pen.setStyle(Qt::SolidLine);
painter.setPen(pen);
QBrush brush;
brush.setColor(Qt::blue);
brush.setStyle(Qt::SolidPattern);
painter.setBrush(brush);
// //设置画笔相关:方法二
// painter.setPen(QPen(Qt::blue,2,Qt::SolidLine));//设置画笔形式
painter.setBrush(QBrush(Qt::red,Qt::SolidPattern));//设置画刷形式
//画点
painter.drawPoint(QPoint(50,50));
//画直线
painter.drawLine(QPoint(100,100), QPoint(100,100));
//画矩形
painter.drawRect(100,100,150,150);
QPoint topleft = QPoint(200, 200);
QRect rect;
rect.setTopLeft(topleft);
// rect.setLeft(200);))
// rect.setTop(200);
rect.setWidth(-200);//ok
rect.setHeight(-200);//ok
painter.drawRect(rect);
// //画多边形
// QPoint point1 = QPoint(20, 20);
// QPoint point2 = QPoint(40, 40);
// QPoint point3 = QPoint(60, 20);
// QPoint point4 = QPoint(60, 80);
// QPoint point5 = QPoint(40, 60);
// QPoint point6 = QPoint(20, 80);
// QPoint points[] = { point1, point2, point3, point4, point5, point6 };
painter.drawConvexPolygon(points, 6);//凸面的
// painter.drawPolygon(points, 6);
//画文字
int x = width()-20;
QString text = "电流值";
int length=text.toLocal8Bit().length();
int y = ( height() / 2);
painter.rotate(90);
painter.drawText(y-30, -x, "电流值");
painter.rotate(180);
painter.drawText(-y-6, 20, "电压值");
// //结束绘画
// painter.end();
//}
//使用QPainter进行绘图的时候,如果绘图对象不是窗体,而是像QPixmap之类的话,就可以不用再paintEvent里面使用。
void Widget::nonPaintEvent()
{
QPixmap pixmap(400, 300);//此处pixmap注意初始化,否则会报错:QPainter::begin: Paint device returned engine == 0, type: 2
//pixmap.load(":/background.png");
pixmap.fill();
QPainter painter(&pixmap);
// painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(QPen(Qt::black, 2));
painter.drawLine(QPointF(50.5, 50.5), QPointF(100.5, 100.5));
QLabel *label = new QLabel("hello", this);
label->setPixmap(pixmap);//QLabel的setPixmap方法本质上也是调用paintEvent方法,重写paintEvent会覆盖setPixmap绘图效果。
// update();//must call when overwrite paintEvent
}
QPainter
最新推荐文章于 2024-07-21 15:52:39 发布