#include "widget.h"
#include "ui_widget.h"
#include <QPainter>
#pragma execution_character_set("utf-8")
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);//消锯齿
//开始绘画
// painter.begin(this);
//缩放
// painter.scale(1.5,1.5);
//移动坐标系
//painter.translate(100,50);
//旋转
//painter.rotate(45); //顺时针
//保存
// painter.save();
// // 设置画笔相关:方法一
// 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);
//画椭圆
painter.drawEllipse(0,0,200,200);
//画弧
QRect rectArc(50,50,100,100);
//painter.drawArc(rectArc,0*16,90*16);
//画文字
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, "电压值");
//画图片
QPoint torPos(100,100);
QImage torImg(":/images/tortoise.png");
painter.drawImage(torPos,torImg);
//恢复
painter.restore();
//结束绘画
painter.end();
}
注意事项:
假设QWidget主窗体里面包含子控件widget,如果想要在widget中绘制内容,此时在主窗体的paintEvent事件中进行绘制会出错,正确的用法是重写widget类并且在widget类中重写paintEvent事件进行绘制。
// 错误的写法
class MainWidget : public QWidget
{
protected:
void paintEvent(QPaintEvent *)
{
QPainter painter(ui->widget); //error
...
}
};
//正确的写法
class MainWidget : public QWidget
{
};
class Widget : public QWidget
{
protected:
void paintEvent(QPaintEvent *)
{
QPainter painter(this); //true
...
}
};