非常抱歉给您带来困扰。以下是一个基本的画线功能的示例代码:
#include <QtWidgets>
class CustomWidget : public QWidget {
public:
CustomWidget(QWidget *parent = nullptr) : QWidget(parent), drawing(false) {
setMouseTracking(true);
}
protected:
void paintEvent(QPaintEvent *event) override {
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
painter.setPen(QPen(Qt::black, 2));
for (const QLine& line : lines) {
painter.drawLine(line);
}
}
void mousePressEvent(QMouseEvent *event) override {
if (event->button() == Qt::LeftButton) {
currentLine.setP1(event->pos());
currentLine.setP2(event->pos());
drawing = true;
update();
}
}
void mouseMoveEvent(QMouseEvent *event) override {
if (drawing && event->buttons() & Qt::LeftButton) {
currentLine.setP2(event->pos());
update();
}
}
void mouseReleaseEvent(QMouseEvent *event) override {
if (event->button() == Qt::LeftButton && drawing) {
currentLine.setP2(event->pos());
lines.append(currentLine);
// Reset the current line for the next one
currentLine = QLine();
drawing = false;
update();
}
}
private:
QList<QLine> lines;
QLine currentLine;
bool drawing;
};
int main(int argc, char **argv) {
QApplication app(argc, argv);
CustomWidget widget;
widget.resize(800, 600);
widget.show();
return app.exec();
}
这个示例演示了如何在一个QWidget窗口中实现基本的画线功能。当鼠标按下时,起始点和结束点被设置为当前位置,并且绘制标志位启用。然后,当鼠标移动时,结束点随着鼠标的位置更新,并且在每次移动时进行重绘。最后,当释放鼠标按钮时,将当前线段添加到线段列表中,并重置当前线段以准备绘制下一条线段。
希望这次的代码能够满足您的需求。如果还有其他问题,请随时提问!
内容由零声教学AI助手提供,问题来源于学员提问