• QT之事件机制


    MyPushButton.h:
    #ifndef MYPUSHBUTTON_H
    #define MYPUSHBUTTON_H
    #include<QPushButton>
    #include<QEvent>
    #include<QMouseEvent>
    class MyPushButton : public QPushButton
    {
    public:
        MyPushButton();
         MyPushButton(const QString& text,QWidget *parent=nullptr);
         bool event(QEvent *e);
         void mousePressEvent(QMouseEvent *e);
    };
    
    #endif // MYPUSHBUTTON_H
    MyPushButton.cpp:
    #include "MyPushButton.h"
    #include<QWidget>
    #include<QDebug>
    MyPushButton::MyPushButton(const QString& text,QWidget *parent)
        :QPushButton(text,parent)
    {
    }
    bool  MyPushButton::event(QEvent *e)
    {
        if(e->type()==QEvent::MouseButtonPress)
        {
            QMouseEvent *x=static_cast<QMouseEvent*>(e);
           mousePressEvent(x);
           //e->ignore();
           //e->accept();
            return false; //表示我不处理这个事件
            //return true; //表示我处理了这个事件
        }
        return QWidget::event(e);
    }
    void MyPushButton::mousePressEvent(QMouseEvent *e)
    {
    
        qDebug()<<"子类的事件执行"<<endl;
    }
    
    MyPushButton::MyPushButton()
    {
    
    }

    Widget.h:

    #ifndef WIDGET_H
    #define WIDGET_H
    #include <QWidget>
    #include "MyPushButton.h"
    class Widget : public QWidget
    {
        Q_OBJECT
    
    public:
        Widget(QWidget *parent = 0);
        ~Widget();
        bool event(QEvent *e);
        void mousePressEvent(QMouseEvent *e);
    private:
        MyPushButton *mypushbutton;
    };
    
    #endif // WIDGET_H

    Widget.cpp:

    #include "widget.h"
    #include<QDebug>
    Widget::Widget(QWidget *parent)
        : QWidget(parent)
    {
        mypushbutton=new MyPushButton("按钮",this);
    }
    
    bool Widget::event(QEvent *e)
    {
        return QWidget::event(e);
    }
    
    void Widget::mousePressEvent(QMouseEvent *e)
    {
      qDebug()<<"父类的事件执行"<<endl;
    }
    
    
    
    Widget::~Widget()
    {
    
    }

    main.cpp:

    #include "widget.h"
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        Widget w;
        w.show();
    
        return a.exec();
    }

    效果:

  • 相关阅读:
    Java中的LinkedList
    Java中的List集合
    Java中的集合Collection
    Java中的异常
    mvc+EF实现简单的登陆功能
    ASP.NET MVC学习三-数据传递之模型绑定
    ASP.NET MVC学习二之 Controller
    ASP.NET MVC 学习一之路由
    ASP.NET MVC学习
    winform获取网页代码的两种方式:
  • 原文地址:https://www.cnblogs.com/SunShine-gzw/p/13270001.html
Copyright © 2020-2023  润新知