• 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);
    
    }

     

  • 相关阅读:
    用户模式同步之互斥体小解
    用户模式同步之信号量小解
    用户模式同步之事件小解
    中断和异常
    断点之软件断点的一些基本知识(INT3)
    部署Django项目Nginx + uwsgi
    CentOS切换root用户一直提示Incorrect password
    一张图看懂Mysql的join连接
    Nginx部署入门
    Django使用多个数据库
  • 原文地址:https://www.cnblogs.com/mrguoguo/p/14841629.html
Copyright © 2020-2023  润新知