zoukankan      html  css  js  c++  java
  • qt5-event事件的传递

    enent事件是通过返回true或false,来决定是否传递事件,不能通过接受accept()或忽略ignore()

    c.h文件

    #ifndef C_H
    #define C_H
    
    #include <QPushButton>
    #include <QEvent>
    #include <QDebug>
    
    class C:public QPushButton
    {
    public:
        C();
        bool event(QEvent* e); //重写event事件
    
    };
    
    #endif // C_H

    c.cpp文件

    #include "c.h"
    
    C::C()
    {
    
    }
    
    bool C::event(QEvent *e)
    {
        if(e->type()==QEvent::KeyPress)
         {qDebug()<<"C按下了键盘";
         return 0;   //返回false,将事件传递给父对象处理
        }
         if(e->type()==QEvent::MouseButtonPress)
         {qDebug()<<"C按下了鼠标";
         return 1; } //返回true,事件不传递给父对象
         return QWidget::event(e);
    }

    win.h文件

    #ifndef WIN_H
    #define WIN_H
    
    #include <QWidget>
    #include <QDebug>
    #include "c.h"
    
    QT_BEGIN_NAMESPACE
    namespace Ui { class Win; }
    QT_END_NAMESPACE
    
    class Win : public QWidget
    {
        Q_OBJECT
    
    public:
        Win(QWidget *parent = nullptr);
        ~Win();
        bool event(QEvent* e);
    
    private:
        Ui::Win *ui;
        C* mc;
    };
    #endif // WIN_H

    win.cpp文件

    #include "win.h"
    #include "ui_win.h"
    
    Win::Win(QWidget *parent)
        : QWidget(parent)
        , ui(new Ui::Win)
    {
        ui->setupUi(this);
    
        mc=new C();
        mc->setParent(this);
        mc->setText("AAA");
        mc->move(22,22);
        resize(300,200);
    
    }
    
    Win::~Win()
    {
        delete ui;
    
    }
    
    bool Win::event(QEvent *e)
    {
        if(e->type()==QEvent::KeyPress)
         {qDebug()<<"win你按下了键盘"; }
         if(e->type()==QEvent::MouseButtonPress)
         {qDebug()<<"win你按下了鼠标"; }
         if(e->type()==QEvent::MouseButtonRelease)
         {qDebug()<<"你释放了鼠标"; }
        return QWidget::event(e);
    }

    main.cpp代码

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

    以上工程下载地址:链接:https://pan.baidu.com/s/17ULgzD3I8SfkrLC-eNbAEg    提取码:6666   

    事件的传递顺序

    event()函数、事件过滤器、和事件处理函数的调用顺序如下:
    首先按逆序调用事件过滤器,然后调用 event()函数,最后调用事件处理函数(注意:事件处理函数需在 event()函数中明确或间接调用,否则不会调用事件处理函数)。

  • 相关阅读:
    Android仿人人客户端(v5.7.1)——个人主页(三)
    hdu2554-N对数的排列问题
    POJ1363:Rails
    golang printf
    HDU1200:To and Fro
    [C# 基础知识系列]专题六:泛型基础篇——为什么引入泛型
    poj 2480 (欧拉函数应用)
    Re:从0开始的微服务架构--(二)快速快速体验微服务架构?--转
    爬虫推荐的工具
    python2 与 python3 语法区别--转
  • 原文地址:https://www.cnblogs.com/liming19680104/p/13710250.html
Copyright © 2011-2022 走看看