Qt涂鸦板

server/2024/10/21 11:55:57/

Qt版本:Qt6

具体代码:

  1. 头文件 dialog.h
#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>QT_BEGIN_NAMESPACE
namespace Ui {
class Dialog;
}
QT_END_NAMESPACEclass Dialog : public QDialog
{Q_OBJECTpublic:Dialog(QWidget *parent = nullptr);~Dialog();private:Ui::Dialog *ui;
private:QPixmap pix;QPoint lastPoint;//记录鼠标位置QPoint endPoint;//记录鼠标位置
protected:void paintEvent(QPaintEvent *);void mousePressEvent(QMouseEvent *);void mouseMoveEvent(QMouseEvent *);void mouseReleaseEvent(QMouseEvent *);
};
#endif // DIALOG_H
  1. 源文件 dialog.cpp
#include "dialog.h"
#include "ui_dialog.h"
#include <QPixmap>
#include <QPoint>
#include <QPainter>
#include <QMouseEvent>
Dialog::Dialog(QWidget *parent): QDialog(parent), ui(new Ui::Dialog)
{ui->setupUi(this);//设置窗口大小resize(600, 500);//设置画布大小和背景pix = QPixmap(200, 200);pix.fill(Qt::white);
}Dialog::~Dialog()
{delete ui;
}
void Dialog::paintEvent(QPaintEvent *e)
{QPainter painter(this);painter.drawPixmap(0, 0, pix); // 将绘制的图像绘制到窗口上
}void Dialog::mousePressEvent(QMouseEvent *e)
{if (e->button() == Qt::LeftButton)//==:鼠标事件的掩码信息与LeftButton标记信息相等即表示鼠标坐点击{lastPoint = e->pos(); // 记录鼠标点击的起始点}
}void Dialog::mouseMoveEvent(QMouseEvent *e)
{if (e->buttons() & Qt::LeftButton)//&:鼠标事件的掩码信息中包含有LeftButton标记信息即表示鼠标在移动{QPainter painter(&pix); // 创建一个QPainter对象,并将其绑定到pix上painter.setPen(QPen(Qt::black, 3)); // 设置画笔颜色和线宽painter.drawLine(lastPoint, e->pos()); // 在pixmap上绘制线条lastPoint = e->pos(); // 更新lastPoint为当前鼠标位置update(); // 触发窗口的重绘--更新画板}
}void Dialog::mouseReleaseEvent(QMouseEvent *e)
{if (e->button() == Qt::LeftButton){QPainter painter(&pix); // 创建一个QPainter对象,并将其绑定到pix上painter.setPen(QPen(Qt::black, 3)); // 设置画笔颜色和线宽painter.drawLine(lastPoint, e->pos()); // 在pixmap上绘制线条update(); // 触发窗口的重绘--更新画板}
}
  1. 源文件 main.cpp
#include "dialog.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Dialog w;w.show();return a.exec();
}

http://www.ppmy.cn/server/54405.html

相关文章

中介子方程四十三

XXFXXaXnXaXXαXLXyXXWXuXeXkXeXuXWXXyXLXαXXaXnXaXXFXXaXnXaXXαXLXyXXWXuXeXkXeXuXWXXyXLXαXXaXnXaXXFXXuXXWXXuXXdXXrXXαXXuXpXXKXηXiXXnXXyXηXuXXrXXaXnXXαXLXyXXWXuXeXkXeXuXWXXyXLXαXXnXaXXrXXuXηXyXXnXXiXηXKXXpXuXXαXXrXXdXXuXWXπXXWXeXyXeXbXπXpXXNXXqXeX…

Python面试题:在 Python 中,如何处理异常?

在 Python 中&#xff0c;异常处理是编写健壮代码的重要部分。Python 提供了 try、except、else 和 finally 关键字来捕获和处理异常。以下是对这些关键字及相关知识点的详细解析。 异常处理基本语法 try-except try 块用于包裹可能引发异常的代码&#xff0c;except 块用于…

SQL MINUS 运算符:查找数据集之间的差异

在 SQL 中&#xff0c;MINUS 运算符在查询中起着至关重要的作用&#xff0c;它允许开发人员识别和检索存在于一个数据集中但不存在于另一个数据集中的记录。本文探讨了 SQL 中 MINUS 运算符的功能、用法和实际应用&#xff0c;强调了它在数据分析和操作任务中的重要性。 理解 …

Qt学习:Qt窗口组件以及窗口类型

一、Qt的窗口组件有哪些 Qt是一个跨平台的C应用程序开发框架&#xff0c;它的窗口组件&#xff0c;也称为用户界面元素&#xff0c;为开发者提供了丰富的可视化界面设计选项。在Qt中&#xff0c;窗口组件主要包括&#xff1a; 窗口&#xff08;Window&#xff09;&#xff1a;…

泛微开发修炼之旅--28巧用计划任务更新建模数据

文章链接&#xff1a;28巧用计划任务更新建模数据

android应用的持续构建CI(三)-- 手动签名

一、背景 关于android应用的签名及其原理&#xff0c;很多文章都有讲述&#xff0c;无意重复赘述。 本文紧接上文&#xff0c;站在运维的角度&#xff0c;对开发是透明的。 但是它又和gradle build 构建动作是紧密相关的。 第一步使用jdk的keytool生成证书文件&#xff0c;…

Python 面试【高难】

欢迎莅临我的博客 &#x1f49d;&#x1f49d;&#x1f49d;&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

# 职场生活之道:善于团结

在职场这个大舞台上&#xff0c;每个人都是演员&#xff0c;也是观众。要想在这个舞台上站稳脚跟&#xff0c;除了专业技能&#xff0c;更要学会如何与人相处&#xff0c;如何团结他人。团结&#xff0c;是职场生存的重要法则之一。 1. 主动团结&#xff1a;多一个朋友&#x…