Qt之QPainter:重写mainwindows绘图事件绘制直线,弧线、设置画笔画刷

http://shouce.jb51.net/qt-beginning/15.html

//光标定位到QPainter类名上,然后按下键盘上的F1按键,这时会自动跳转到该类的帮助页面

1、新建Qt Gui应用,名为MainWindow,基类为QMainWindow。

2、修改mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
protected:
    void paintEvent(QPaintEvent *); //重绘事件处理函数的声明: 所有的绘制操作都要在这个函数里面完成。
};

#endif // MAINWINDOW_H

3、

3.1、绘制基本图形

#include "mainwindow.h"
#include <QPainter>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
}

MainWindow::~MainWindow()
{

}
void MainWindow::paintEvent(QPaintEvent *)
{
    QPainter painter(this);  //QPainter对象
    painter.drawLine(QPointF(0, 0), QPointF(100, 100)); //注意:不包括工具栏,坐标就是窗口的起点
}

 

741dcb333d48ba693e07e149ad96cbb66a9.jpg

3.2 设置画笔

3.2.1、设置画笔颜色

void MainWindow::paintEvent(QPaintEvent *)
{
    QPainter painter(this);  //QPainter对象
    QPen pen; //画笔
    pen.setColor(QColor(255, 0, 0));  //设置画笔颜色
    painter.setPen(pen);
    painter.drawLine(QPointF(0, 0), QPointF(100, 100)); //注意:不包括工具栏,坐标就是窗口的起点
}

870a63b1f6419fe2d8948d77f4a588a3ff8.jpg

3.2.2、自定义轮廓线样式

void MainWindow::paintEvent(QPaintEvent *)
{
    QPainter painter(this);  //QPainter对象
    QPen pen; //画笔
    QVector<qreal> dashes;
    qreal space = 4;
    dashes << 1 << space << 3 << space << 9 << space
                 << 27 << space << 9 << space; //函数自定义样式:自定义轮廓线样式

    pen.setDashPattern(dashes);  //设置线性风格:
    pen.setColor(QColor(255, 0, 0));  //设置画笔颜色
    painter.setPen(pen);

    painter.drawLine(QPointF(0, 0), QPointF(100, 100)); //注意:不包括工具栏,坐标就是窗口的起点
}

098d502ec63acc75f84a5272cf8f142ca59.jpg

3.3、设置画刷

3.3.1、设置画刷颜色

void MainWindow::paintEvent(QPaintEvent *)
{
    QPainter painter(this);  //QPainter对象
    QPen pen; //画笔
    pen.setColor(QColor(255, 0, 0));  //设置画笔颜色
    painter.setPen(pen);

 //   QBrush brush(QColor(0, 255, 0, 125)); //画刷:填充矩形的颜色
    QBrush brush(Qt::DotLine); //Qt预定义的颜色,在帮助中索引Qt::GlobalColor关键字查看
    painter.setBrush(brush); //添加画刷

    painter.drawRect(50, 50, 200, 100); //绘制矩形

}

2ce9194eae8fbbcdeb40e9bab755b675f9b.jpg

3.3.2、设置画刷风格

void MainWindow::paintEvent(QPaintEvent *)
{
    QPainter painter(this);  //QPainter对象
    QPen pen; //画笔
    pen.setColor(QColor(255, 0, 0));  //设置画笔颜色
    painter.setPen(pen);

    QBrush brush(Qt::DotLine); //Qt预定义的颜色,在帮助中索引Qt::GlobalColor关键字查看
    brush.setStyle(Qt::HorPattern);
    painter.setBrush(brush); //添加画刷


    painter.drawRect(50, 50, 200, 100); //绘制矩形

}

fb72c9aa6f2215feb7cd05bcccec5b1bb31.jpg

f81457fa68477ca6c928b28424eac50d4c5.jpg

a2373ec2b3d818ea250eaff998817247c48.jpg

4、画弧线

void MainWindow::paintEvent(QPaintEvent *)
{
    QRectF rectangle(10.0, 20.0, 80.0, 60.0); //矩形
    int startAngle = 30 * 16;     //起始角度
    int spanAngle = 120 * 16;   //跨越度数
    QPainter painter(this);
    painter.drawArc(rectangle, startAngle, spanAngle);
 //画弧线时,角度被分成了十六分之一,就是说,要想为30度,就得是30*16。它有起始角度和跨度,还有位置矩形
}

ae2e8ba4d9edfdc388af510cd997ce38782.jpg

转载于:https://my.oschina.net/u/3919756/blog/1942320

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值