Qt 实现签名

话不多说直接上全部代码:

1.头文件:

#ifndef NEWLABLE_H
#define NEWLABLE_H

#include <QLabel>
#include <QMouseEvent>
#include <QPixmap>
#include <QQueue>
#include <QStack>
class newLable : public QLabel
{
    Q_OBJECT
public:
    explicit newLable(QWidget *parent = nullptr);
    void mousePressEvent(QMouseEvent *ev) override;
    void mouseMoveEvent(QMouseEvent *ev) override;
    void paintEvent(QPaintEvent *) override;
    void mouseReleaseEvent(QMouseEvent *ev) override;

signals:
private:
    bool m_isDraw;
    QPixmap m_pixmap;
    QQueue<QPoint> m_queue;
    QPoint m_pre;
};

#endif // NEWLABLE_H

cpp文件:

#include "newlable.h"
#include <QPainter>
#include <QPixmap>
#include <QDebug>
newLable::newLable(QWidget *parent) : QLabel(parent)
{
    m_pixmap = QPixmap(1,1);
    m_pixmap.fill(QColor(255,255,255,0));
}

void newLable::mousePressEvent(QMouseEvent *ev)
{    
    m_isDraw  = true;
    m_pre = ev->pos();
}

void newLable::mouseMoveEvent(QMouseEvent *ev)
{
    if(!m_isDraw)
        return;
    m_queue.push_back(ev->pos());
    update();
}

void newLable::paintEvent(QPaintEvent * )
{
    m_pixmap = m_pixmap.scaled(width(),height());
    QPainter p;
    p.begin(&m_pixmap);
    while(!m_queue.isEmpty())
    {
        QPoint pos = m_queue.dequeue();
        p.drawLine(m_pre,pos);
        m_pre = pos;
    }
    p.end();

    p.begin(this);
    p.drawPixmap(0,0,width(),height(),m_pixmap);
    p.end();
}

void newLable::mouseReleaseEvent(QMouseEvent *ev)
{
    m_isDraw = false;
    m_queue.enqueue(ev->pos());
    update();
}

效果:
在这里插入图片描述



  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值