zoukankan      html  css  js  c++  java
  • 事件的传递 键盘事件作为例子

    //widget.h
    #ifndef WIDGET_H
    #define WIDGET_H
    
    #include <QWidget>
    #include"mylineedit.h"
    #include <QKeyEvent>
    
    namespace Ui {
    class Widget;
    }
    
    class Widget : public QWidget
    {
        Q_OBJECT
    
    public:
        explicit Widget(QWidget *parent = 0);
        ~Widget();
    
    private:
        Ui::Widget *ui;
    
    private:
           myLineEdit * myEdit;
    protected:
           void keyPressEvent(QKeyEvent * event);
    public:
        bool eventFilter(QObject *watched, QEvent *event); //定义事件过滤器
    
    };
    
    #endif // WIDGET_H
    //widget.cpp
    #include "widget.h"
    #include "ui_widget.h"
    #include "mylineedit.h"
    #include<QDebug>
    Widget::Widget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Widget)
    {
        ui->setupUi(this);
    
        myEdit = new myLineEdit(this);
        myEdit->move(100,100);
        myEdit->installEventFilter(this);//给myEdit安装事件过滤器
    }
    
    Widget::~Widget()
    {
        delete ui;
    }
    
    void Widget:: keyPressEvent(QKeyEvent * event)
    {
        qDebug()<<tr("父窗口widget的键盘按下事件的处理函数被调用");
    }
    
    bool Widget::eventFilter(QObject *watched, QEvent *event)
    {
        if(watched == myEdit)
            if(event->type()==QEvent::KeyPress)
                qDebug()<<tr("父窗口widget的事件过滤器被调用");
        return QWidget::eventFilter(watched,event);
             //最后返回QWidget类默认的事件过滤器eventFilter()的执行结果
    }
    //myLineEdit.h
    #ifndef MYLINEEDIT_H
    #define MYLINEEDIT_H
    
    #include <QLineEdit>
    class myLineEdit : public QLineEdit
    {
       Q_OBJECT
    public:
        explicit myLineEdit(QWidget * widget);
    
    protected:
        void keyPressEvent(QKeyEvent * event);
    public:
        bool event(QEvent *event);//重写事件函数,在事件传给事件处理函数之前,捕获事件
    };
    
    #endif // MYLINEEDIT_H
    //MyLineEdit.cpp
    #include "mylineedit.h"
    #include <QDebug>
    #include <QKeyEvent>
    myLineEdit::myLineEdit(QWidget * widget):QLineEdit(widget)
    {
    
    }
    
    void myLineEdit::keyPressEvent(QKeyEvent *event)
    {
        qDebug()<<tr("输入框的键盘按下事件处理函数");
        QLineEdit::keyPressEvent(event);
        event->ignore();//忽略该事件,交给父窗口处理
    }
    
    bool myLineEdit::event(QEvent *event)
    {
        if(event->type() == QEvent::KeyPress)
            qDebug()<<tr("输入框自己的event函数,在调用事件处理函数之前,捕获事件");
        return QLineEdit::event(event);
                //调用QLineEdit的默认event 函数,不然MyLineEdit界面显示会发生异常
                //该函数一般返回父类的event()函数的操作结果
    }
    //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_Data中创建数据库获取连接串简便方法!
    ObjectDataSource配合存储过程(采用数据集)的使用(删除可以解决,但是编辑出错好像它的方法也无法解决
    金鹰dreamweaver视频教程下载地址
    ASP.NET里创建Microsoft Word文档
    net3:Calendar控件的使用
    vs2005做的留言本——天轰川下载
    Wiley出版 SQL Server 2005宝典
    ADO:防止更新的数据含有单引号而出错
    用 Bitcron 搭博客:你只管写作,它负责呈现
    如何去掉Myeclipse对JS等文件的验证
  • 原文地址:https://www.cnblogs.com/azbane/p/8668150.html
Copyright © 2011-2022 走看看