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

    效果:

  • 相关阅读:
    简单下拉列表的实现
    App Store 加急审核解析
    iOS 封装一个带复制功能的UILabel
    Xcode 控制台打印Unicode字符串转换为中文
    修改系统UITableViewCell的ImageView大小
    iOS SDWebImage实现原理详解
    Mac电脑用终端生成SSH key 访问自己的Github
    MVC与MVVM之间在IOS中的区别
    iOS TabBarItem设置红点(未读消息)
    virtualenv 创建python虚拟环境
  • 原文地址:https://www.cnblogs.com/SunShine-gzw/p/13270001.html
Copyright © 2020-2023  润新知