首页 » 软件优化 » 包括鼠标交互和保存绘图的功能(鼠标路径保存绘图函数)

包括鼠标交互和保存绘图的功能(鼠标路径保存绘图函数)

神尊大人 2024-11-03 04:36:51 0

扫一扫用手机浏览

文章目录 [+]

#include <QApplication>#include <QWidget>#include <QPainter>#include <QMouseEvent>#include <QFileDialog>class DrawingWidget : public QWidget{public: DrawingWidget(QWidget parent = nullptr) : QWidget(parent), mDrawing(false) {}protected: void mousePressEvent(QMouseEvent event) override { if (event->button() == Qt::LeftButton) { mDrawing = true; mCurrentPath.moveTo(event->pos()); } } void mouseMoveEvent(QMouseEvent event) override { if (mDrawing) { mCurrentPath.lineTo(event->pos()); update(); } } void mouseReleaseEvent(QMouseEvent event) override { Q_UNUSED(event) if (mDrawing) { mDrawing = false; mPaths.append(mCurrentPath); mCurrentPath = QPainterPath(); } } void paintEvent(QPaintEvent event) override { Q_UNUSED(event) QPainter painter(this); // 绘制已保存的路径 painter.setRenderHint(QPainter::Antialiasing, true); painter.setPen(Qt::black); painter.drawPath(mCurrentPath); for (const auto &path : mPaths) { painter.drawPath(path); } } void keyPressEvent(QKeyEvent event) override { if (event->key() == Qt::Key_S) { // 保存绘图为图片文件 QString filePath = QFileDialog::getSaveFileName(this, "Save Drawing", "", "PNG Files (.png)"); if (!filePath.isEmpty()) { QPixmap pixmap(size()); render(&pixmap); pixmap.save(filePath, "PNG"); } } }private: bool mDrawing; QPainterPath mCurrentPath; QList<QPainterPath> mPaths;};int main(int argc, char argv[]){ QApplication app(argc, argv); DrawingWidget drawingWidget; drawingWidget.resize(500, 500); drawingWidget.show(); return app.exec();}

在这个示例中,我们在DrawingWidget中添加了鼠标事件处理函数:mousePressEvent()、mouseMoveEvent()和mouseReleaseEvent(),用于捕获鼠标按下、移动和释放事件。
在鼠标按下事件中,我们使用QPainterPath对象记录当前路径,并设置mDrawing为true。
在鼠标移动事件中,如果mDrawing为true,将当前位置添加到路径中,并调用update()函数使窗口进行重绘。
在鼠标释放事件中,如果mDrawing为true,将当前路径保存到路径列表中,并重置当前路径。

在绘图过程中,我们使用paintEvent()函数进行绘制,首先绘制当前路径的临时线段,然后绘制保存的路径。

为了保存绘图结果,我们还添加了键盘事件处理函数keyPressEvent()。
用户按下"S"键时,弹出文件对话框并获取要保存的文件路径。
然后使用QPixmap和render()函数将窗口内容渲染到像素图中,最后保存为PNG格式的图片文件。

包括鼠标交互和保存绘图的功能(鼠标路径保存绘图函数) 软件优化
(图片来自网络侵删)

通过以上代码,你可以实现一个简单的绘图软件,支持鼠标交互和保存绘图。
可以根据需求进一步扩展和修改代码,添加更多绘图工具和功能

相关文章