下面是一个基于Qt的简单示例代码,演示如何在白板上实现橡皮擦功能:
#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QMouseEvent>
class Whiteboard : public QWidget {
public:
Whiteboard(QWidget *parent = nullptr) : QWidget(parent), erasing(false) {
setMouseTracking(true); // 接收鼠标移动事件
setFocusPolicy(Qt::StrongFocus); // 接收键盘焦点
}
protected:
void mousePressEvent(QMouseEvent* event) override {
if (event->button() == Qt::RightButton) {
erasing = true; // 开启橡皮擦模式
} else {
// 其他绘制逻辑...
}
}
void mouseReleaseEvent(QMouseEvent* event) override {
if (event->button() == Qt::RightButton) {
erasing = false; // 关闭橡皮擦模式
}
}
void mouseMoveEvent(QMouseEvent* event) override {
if (erasing) {
QPainter painter(this);
painter.setCompositionMode(QPainter::CompositionMode_Clear);
painter.setPen(Qt::NoPen);
painter.setBrush(Qt::white); // 橡皮擦颜色设置为背景色(白色)
painter.drawEllipse(event->pos(), 10, 10); // 根据实际需要调整擦除的大小
}
}
void paintEvent(QPaintEvent*) override {
QPainter painter(this);
painter.drawRect(rect());
}
private:
bool erasing;
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
Whiteboard whiteboard;
whiteboard.show();
return app.exec();
}
上述代码中,Whiteboard
继承自QWidget
,重写了鼠标事件和绘图事件的方法。通过按下鼠标右键并移动来实现橡皮擦功能。当释放鼠标右键时,橡皮擦模式会被关闭。绘制逻辑可以根据需求进行相应的调整。
希望这个完整示例代码对您有所帮助!
内容由零声教学AI助手提供,问题来源于学员提问