下面是一个简单的示例代码,演示了如何使用Qt来实现一个基本的白板软件:
#include <QtWidgets>
class Whiteboard : public QWidget {
public:
Whiteboard(QWidget *parent = nullptr) : QWidget(parent) {
setAttribute(Qt::WA_StaticContents);
modified = false;
scribbling = false;
}
void clearImage() {
image.fill(qRgb(255, 255, 255));
modified = true;
update();
}
protected:
void mousePressEvent(QMouseEvent *event) override {
if (event->button() == Qt::LeftButton) {
lastPoint = event->pos();
scribbling = true;
}
}
void mouseMoveEvent(QMouseEvent *event) override {
if ((event->buttons() & Qt::LeftButton) && scribbling)
drawLineTo(event->pos());
}
void mouseReleaseEvent(QMouseEvent *event) override {
if (event->button() == Qt::LeftButton && scribbling) {
drawLineTo(event->pos());
scribbling = false;
}
}
void paintEvent(QPaintEvent *event) override {
QPainter painter(this);
QRect dirtyRect = event->rect();
painter.drawImage(dirtyRect, image, dirtyRect);
}
private:
void drawLineTo(const QPoint &endPoint) {
QPainter painter(&image);
painter.setPen(Qt::black);
painter.drawLine(lastPoint, endPoint);
modified = true;
int rad = 2; // 设置画笔大小
update(QRect(lastPoint, endPoint).normalized().adjusted(-rad, -rad, +rad, +rad));
lastPoint = endPoint;
}
QImage image;
QPoint lastPoint;
bool scribbling;
bool modified;
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
Whiteboard whiteboard;
whiteboard.resize(800, 600);
whiteboard.show();
QPushButton clearButton("Clear");
QObject::connect(&clearButton, &QPushButton::clicked, &whiteboard, &Whiteboard::clearImage);
clearButton.show();
return app.exec();
}
这个示例使用QWidget派生的自定义类Whiteboard
来创建一个白板窗口。通过处理鼠标事件,在绘图区域上实现了自由绘制功能。清空按钮可以清除画布内容。
请注意,这只是一个简单的示例,可能还需要进一步优化和添加其他功能来满足实际需求。希望对你编写白板软件有所帮助!
内容由零声教学AI助手提供,问题来源于学员提问