49 lines
1.2 KiB
C++
49 lines
1.2 KiB
C++
#include "BrushPad.h"
|
||
#include <QPainter>
|
||
#include <QPaintEvent>
|
||
#include <QDebug>
|
||
BrushPad::BrushPad(QWidget *parent)
|
||
: QGroupBox(parent)
|
||
{
|
||
setMinimumSize(100, 100);
|
||
m_canvas = QPixmap(size());
|
||
m_canvas.fill(Qt::transparent);
|
||
}
|
||
|
||
void BrushPad::setBrushImage(const QImage &img)
|
||
{
|
||
m_brush = img.convertToFormat(QImage::Format_ARGB32_Premultiplied);
|
||
}
|
||
|
||
void BrushPad::moveBrush(const QPoint &globalPos)
|
||
{
|
||
// 1. 不管笔刷图,直接画一个 20×20 的红色方块到指定坐标
|
||
QPainter p(&m_canvas);
|
||
p.setCompositionMode(QPainter::CompositionMode_SourceOver);
|
||
p.drawImage(globalPos, m_brush); // 直接叠加,不清屏
|
||
update();
|
||
}
|
||
|
||
|
||
void BrushPad::paintEvent(QPaintEvent *)
|
||
{
|
||
// 让基类画边框/标题
|
||
QGroupBox::paintEvent(nullptr);
|
||
|
||
// 直接把我们自己的画布贴出来
|
||
QPainter p(this);
|
||
|
||
|
||
p.drawPixmap(contentsRect().topLeft(), m_canvas);
|
||
// 这里 **绝对不要再调用 update()/repaint()**
|
||
}
|
||
void BrushPad::resizeEvent(QResizeEvent *)
|
||
{
|
||
// 画布跟随控件大小
|
||
QPixmap newPix(contentsRect().size());
|
||
newPix.fill(Qt::transparent);
|
||
QPainter p(&newPix);
|
||
p.drawPixmap(0, 0, m_canvas);
|
||
m_canvas = newPix;
|
||
}
|