QPainter

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值