QT简易画笔

左键按住绘画,右键清空

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QMouseEvent>
#include <QKeyEvent>
#include <QPaintEvent>
#include <QPainter>
#include <QPoint>
#include <string>
#include <list>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT
     class mesages{
    public:
        int x;
        int y;
        QString msg;

     };
public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    void mousePressEvent(QMouseEvent *) ;
    void keyPressEvent(QKeyEvent *) ;
    bool EventFilter(QObject *,QEvent *);
    void paintEvent(QPaintEvent  *);
    QPainter *p;
    void getTex();
    QList<mesages> mytextlist;
     void mouseMoveEvent(QMouseEvent *);
private slots:
    void on_pushButton_clicked();
private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

主要是鼠标事件绘图事件

#include "widget.h"
#include "ui_widget.h"
#include <QEvent>
#include <qdebug.h>
#include <string>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //    connect(this,SIGNAL(returnPressed()),this,SLOT(on_pushButton_clicked()));
    ui->pushButton->installEventFilter(ui->pushButton);
}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_pushButton_clicked()
{
    //    QObject::connect()
    ui->textEdit1->clear();
    //    ui->textEdit1->changeEvent()
    ui->Ui_Widget::pushButton->setText("ssssss");



    //    this->close();
}


void Widget::keyPressEvent(QKeyEvent *event)
{
    int key=event->key();

    qDebug()<<(char)key;
    if (event->key() == Qt::Key_Return && (event->modifiers() & Qt::ControlModifier))
    {

        ui->textEdit1->clear();
        ui->Ui_Widget::pushButton->setText("回车");


    }

}

bool Widget::EventFilter(QObject *q,QEvent *e){

    if(q==(QObject*)ui->pushButton&&((static_cast<QKeyEvent*>(e)->key() == Qt::Key_Return))){

        return  true;
    }
    return QWidget::eventFilter(q,e);
}

void Widget::paintEvent(QPaintEvent  *)
{
        QPainter painter(this);
 p = new QPainter(this);
        painter.drawText(QPoint(300,50),"this is my widget");
       getTex();
//    //绘制一行文字
//    p = new QPainter(this);
//    p->drawText(QPoint(300,50),"this is my widget");
}

void Widget::getTex(){

    foreach (mesages msg, mytextlist) {
        p->drawText(QPoint(msg.x,msg.y),msg.msg);
    }
    p->renderHints();
    this->update();
};

void Widget::mousePressEvent(QMouseEvent *ev)
{
    if( ev->button()==Qt::LeftButton){
        ui->textEdit1->clear();
        ui->Ui_Widget::pushButton->setText("左键");
        mesages msg;
        msg.x=ev->x();
        msg.y=ev->y();
        msg.msg="this is my 左键";
        mytextlist.push_back(msg);
    };

    if( ev->button()==Qt::RightButton){

        ui->textEdit1->clear();
        ui->Ui_Widget::pushButton->setText("右键");
        mytextlist.clear();
        if(ev->modifiers()==Qt::EnterKeyReturn){
            ui->textEdit1->clear();
            ui->Ui_Widget::pushButton->setText("回车");
        }
    }


}

void Widget::mouseMoveEvent(QMouseEvent *ev){

//    if( ev->button()==Qt::LeftButton){};
        ui->textEdit1->clear();
        ui->Ui_Widget::pushButton->setText("左键move");
        mesages msg;
        msg.x=ev->x();
        msg.y=ev->y();
        msg.msg="this is my 左键move";
        mytextlist.push_back(msg);

}

 

原文地址:https://www.cnblogs.com/mrguoguo/p/14841629.html