Qt涂鸦板

news/2024/7/8 9:12:17 标签: qt, c++

Qt版本:Qt6

具体代码:

  1. 头文件 dialog.h
#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

QT_BEGIN_NAMESPACE
namespace Ui {
class Dialog;
}
QT_END_NAMESPACE

class Dialog : public QDialog
{
    Q_OBJECT

public:
    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.niftyadmin.cn/n/5536949.html

相关文章

2018.06.28 -------2024.0628 java 开发工作六年,今天离职了!!总结

前言&#xff1a; 今天从开始有对自己的知识体系做一个完整的回顾&#xff01; 干了六、7 年 软件开发&#xff0c;可以说 所有的项目涉略过吧&#xff0c; 政治、医疗、教育、农业、工业这些方向我都做过软件。可以说非常的杂&#xff0c;展开来说就是 从政府网站、医院转诊、…

Mongodb地理信息数据查询

在MongoDB中&#xff0c;可以使用地理空间查询来查找特定的地理位置信息。以下是一个使用MongoDB的地理空间查询的例子&#xff0c;假设我们有一个名为places的集合&#xff0c;它包含有关地点的信息&#xff0c;并且每个文档都有一个location字段&#xff0c;该字段包含一个地…

四.iOS核心动画 - 图层的视觉效果

引言 在前几篇博客中我们讨论了图层的frame,bounds,position以及让图层加载图片。但是图层事实上不仅可以显示图片&#xff0c;或者规则的矩形块&#xff0c;它还有一系列内建的特性来创建美丽优雅的页面元素。在这篇博客中我们就来探索一下CALayer的视觉效果。 视觉效果 图…

谷歌正在试行人脸识别办公室安全系统

内容提要&#xff1a; &#x1f9ff;据美国消费者新闻与商业频道 CNBC 获悉&#xff0c;谷歌正在为其企业园区安全测试面部追踪技术。 &#x1f9ff;测试最初在华盛顿州柯克兰的一间办公室进行。 &#x1f9ff;一份内部文件称&#xff0c;谷歌的安全和弹性服务 (GSRS) 团队将…

毫米波雷达深度学习技术-1.7训练一个神经网络

1.7 训练一个神经网络 对于训练神经网络&#xff0c;有两个步骤&#xff0c;即前向传递和误差反向传播。 1.7.1 前向传播和反向传播 在前向传递中&#xff0c;输入被馈送到模型并与权重向量相乘&#xff0c;并为每一层添加偏差以计算模型的输出。密集层或全连接层第l层的输入、…

模拟任务积压

这个demo没有实质意义&#xff0c;只是简单模拟一下任务积压的场景。 private static final ExecutorService PRODUCER Executors.newFixedThreadPool(1);private static final ThreadPoolExecutor CONSUMER new ThreadPoolExecutor(3, 3, 0L, TimeUnit.MILLISECONDS, new Li…

视频共享融合赋能平台LntonCVS安防监控平台现场方案实现和应用场景

LntonCVS国标视频融合云平台采用端-边-云一体化架构&#xff0c;部署简单灵活&#xff0c;功能多样化。支持多协议&#xff08;GB28181/RTSP/Onvif/海康SDK/Ehome/大华SDK/RTMP推流等&#xff09;和多类型设备接入&#xff08;IPC/NVR/监控平台&#xff09;。主要功能包括视频直…

Ubuntu 下 LXD 安装配置与调优指南

今天我就给你来分享一下在阿贝云这个不错的免费服务器上部署 LXD 的精彩经历。这家免费云服务器确实不错,虽然只有1核CPU、1G内存、10G硬盘和5M带宽,但性能完全能应付日常使用。废话不多说,让我们开始进入主题吧。 LXD 是一个开源的容器管理软件,可以让你像管理虚拟机一样管理…