以下是一个基于Qt的示例代码,演示了如何在白板下实现橡皮擦功能:
#include <QApplication>
#include <QMainWindow>
#include <QMouseEvent>
#include <QPainter>
class Whiteboard : public QMainWindow
{
public:
Whiteboard(QWidget *parent = nullptr) : QMainWindow(parent)
{
setWindowTitle("Whiteboard");
resize(800, 600);
}
protected:
void mousePressEvent(QMouseEvent *event) override
{
if (event->button() == Qt::LeftButton) {
m_drawing = true;
m_lastPos = event->pos();
}
}
void mouseMoveEvent(QMouseEvent *event) override
{
if (m_drawing) {
drawLineTo(event->pos());
m_lastPos = event->pos();
}
}
void mouseReleaseEvent(QMouseEvent *event) override
{
if (event->button() == Qt::LeftButton && m_drawing) {
drawLineTo(event->pos());
m_drawing = false;
}
}
void paintEvent(QPaintEvent *) override
{
QPainter painter(this);
painter.drawImage(rect(), m_image, rect());
}
private:
void drawLineTo(const QPoint &endPoint)
{
QPainter painter(&m_image);
painter.setPen(Qt::white); // 设置画笔颜色为白色(橡皮擦效果)
painter.drawLine(m_lastPos, endPoint); // 绘制直线到目标位置
update(); // 更新窗口显示
m_lastPos = endPoint; // 更新上一次绘制位置
}
private:
QImage m_image{size(), QImage::Format_RGB32}; // 画布
bool m_drawing{false}; // 是否正在绘制
QPoint m_lastPos; // 上一次绘制的位置
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Whiteboard w;
w.show();
return a.exec();
}
这个示例中,我们创建了一个自定义的Whiteboard
类,它是一个继承自QMainWindow
的窗口。在该类中,我们重写了鼠标事件函数mousePressEvent()
、mouseMoveEvent()
和mouseReleaseEvent()
来捕获鼠标操作,并在paintEvent()
函数中使用QPainter
来绘制图形。
橡皮擦效果通过设置画笔颜色为白色实现,在鼠标移动时不断绘制白色直线来模拟擦除效果。
运行以上代码后,您将看到一个简单的白板窗口,可以用鼠标左键进行绘制,按住Ctrl键并拖动鼠标可以切换到橡皮擦模式。希望这能满足您的需求!如果有任何问题,请随时提问。
内容由零声教学AI助手提供,问题来源于学员提问