绘制
QPainter提供了绘制大多数基本体的函数:drawPoint()、drawPoints()、drawLine()、drawRect()、drawRoundedRect()、drawEllipse()、drawArc()、drawPie()、drawChord()、drawPolyline()、drawPolygon()、drawConverExpolygon()和drawCubicBezier()。drawRects()和drawLines()这两个函数使用当前的画笔在给定的QRects或QLines数组中绘制给定数量的矩形或线条。
QPainer类还提供了fillRect()函数,该函数用给定的QBrush填充给定的QRect,以及擦除给定矩形内区域的eraseRect()函数。
所有这些函数都有整数和浮点版本(推荐使用浮点数版本)。
在父QWidget上绘图 在父QWidget 中重写void paintEvent(QPaintEvent* evnet) 函数 并在函数内创建QPainter对象,传入this指针,表示将在父QWidget上画画
void MainWindow::paintEvent(QPaintEvent* event){
QPainter painter(this);
painter.drawLine(QPoint(0,0), QPoint(100,100));
}
在子部件上绘图 在子部件上画图有两种办法:
一、创建部件类的子类,然后重写paintEvent
最简单的方法是在Qt Creator中新增一个Qt 设计师界面类,然后重写 paintEvent,参考代码如下: paintframe.h
#ifndef PAINTFRAME_H
#define PAINTFRAME_H
#include <QFrame>
namespace Ui {
class PaintFrame;
}
class PaintFrame : public QFrame
{
Q_OBJECT
public:
explicit PaintFrame(QWidget *parent = nullptr);
~PaintFrame();
void paintEvent(QPaintEvent* event);
private:
Ui::PaintFrame *ui;
};
#endif // PAINTFRAME_H
paintframe.cpp
#include "paintframe.h"
#include "ui_paintframe.h"
#include "QPainter"
PaintFrame::PaintFrame(QWidget *parent) :
QFrame(parent),
ui(new Ui::PaintFrame)
{
ui->setupUi(this);
}
PaintFrame::~PaintFrame()
{
delete ui;
}
void PaintFrame::paintEvent(QPaintEvent *event ){
QPainter painter(this);
painter.drawLine(QPoint(0,0), QPoint(100,100));
}
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QPainter"
#include "QPoint"
#include "QDebug"
#include "paintframe.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
PaintFrame * frame = new PaintFrame(this);
frame->move(50, 100);
frame->resize(200, 200);
frame->setStyleSheet("PaintFrame{border:1px solid pink}");
frame->show();
}
MainWindow::~MainWindow()
{
delete ui;
}
QImage绘图
//创建一个绘图设备,Format设置为背景透明
QImage image(400, 300, QImage::Format_ARGB32);
QPainter p;
p.begin(&image);
//绘图
p.drawImage(0, 0, QImage("../Image/noya.jpg"));
//像素点操作
for(int i = 0; i < 50; i++){
for(int j = 0; j < 50; j++){
image.setPixel(QPoint(i, j), qRgb(0, 255, 0));
}
}
p.end();
image.save("../image.jpg");
}