绘画事件

#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
		...
	}	
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值