非常抱歉给您带来困扰。以下是一个完整示例,展示如何使用Qt绘制线条:
#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QMouseEvent>
class Whiteboard : public QWidget {
public:
Whiteboard(QWidget *parent = nullptr) : QWidget(parent), drawing(false) {
setMouseTracking(true); // 接收鼠标移动事件
setFocusPolicy(Qt::StrongFocus); // 接收键盘焦点
}
protected:
void mousePressEvent(QMouseEvent* event) override {
if (event->button() == Qt::LeftButton) {
startPoint = event->pos(); // 记录起始点
drawing = true; // 开启绘制模式
}
}
void mouseReleaseEvent(QMouseEvent* event) override {
if (event->button() == Qt::LeftButton && drawing) {
endPoint = event->pos(); // 记录结束点
drawing = false; // 关闭绘制模式
update(); // 刷新窗口,触发重绘事件
}
}
void mouseMoveEvent(QMouseEvent* event) override {
if (drawing) {
endPoint = event->pos(); // 实时更新结束点的位置
update(); // 刷新窗口,触发重绘事件
}
}
void paintEvent(QPaintEvent*) override {
QPainter painter(this);
painter.drawLine(startPoint, endPoint); // 绘制线条
}
private:
bool drawing;
QPoint startPoint;
QPoint endPoint;
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
Whiteboard whiteboard;
whiteboard.show();
return app.exec();
}
上述代码中,Whiteboard
继承自QWidget
,重写了鼠标事件和绘图事件的方法。通过按下鼠标左键并移动来实现绘制线条功能。当释放鼠标左键时,绘制模式会被关闭,触发窗口重绘事件进行线条的实际绘制。
希望这个重新给出的示例代码能满足您的需求!如果还有其他问题,请随时提问。
内容由零声教学AI助手提供,问题来源于学员提问