QT-事件

作者: 人不知QAQ | 来源:发表于2020-03-12 11:32 被阅读0次

事件

事件(event)是由系统或者 Qt 本身在不同的时刻发出的。

一些事件在对用户操作做出响应时发出,如键盘事件等;另一些事件则是由系统自动发出,如计时器事件。

Qt 程序需要在main()函数创建一个QApplication对象,然后调用它的exec()函数。这个函数就是开始 Qt 的事件循环。在执行exec()函数之后,程序将进入事件循环来监听应用程序的事件。当事件发生时,Qt 将创建一个事件对象。Qt 中所有事件类都继承于QEvent。在事件对象创建完毕后,Qt 将这个事件对象传递给QObject的event()函数。event()函数并不直接处理事件,而是按照事件对象的类型分派给特定的事件处理函数(event handler)

 protected  virtual 类 子函数实现

keyPressEvent()

keyReleaseEvent()

mouseDoubleClickEvent()

mouseMoveEvent()          ----setMouseTracking()

mousePressEvent()

mouseReleaseEvent() 等。

event()函数主要用于事件的分发,分发给不同的事件处理器(event handler)

e->type() == QEvent::KeyPress  事件类别

keyEvent->key() == Qt::Key_Tab  按键值

bool CustomTextEdit::event(QEvent*e)

{

   if (e->type() == QEvent::KeyPress)

{

        QKeyEvent *keyEvent =static_cast(e);

       if (keyEvent->key() == Qt::Key_Tab)

{

            qDebug() << "You presstab.";

            return true;

       }

    }

    return false;

}

事件过滤器

virtual bool QObject::eventFilter ( QObject *watched, QEvent * event );

现在我们可以总结一下 Qt 的事件处理,实际上是有五个层次:

1、重写paintEvent()、mousePressEvent()等事件处理函数。这是最普通、最简单的形式,同时功能也最简单。

1、重写event()函数。event()函数是所有对象的事件入口,QObject和QWidget中的实现,默认是把事件传递给特定的事件处理函数。

1、在特定对象上面安装事件过滤器。该过滤器仅过滤该对象接收到的事件。

1、在QCoreApplication::instance()上面安装事件过滤器。该过滤器将过滤所有对象的所有事件,因此和notify()函数一样强大,但是它更灵活,因为可以安装多个过滤器。全局的事件过滤器可以看到 disabled 组件上面发出的鼠标事件。全局过滤器有一个问题:只能用在主线程。

1、重写QCoreApplication::notify()函数。这是最强大的,和全局事件过滤器一样提供完全控制,并且不受线程的限制。但是全局范围内只能有一个被使用(因为QCoreApplication是单例的)。

class MyApplication : public QApplication

{

public:

    MyApplication(int & argc, char ** argv):QApplication(argc, argv){};

    virtual bool notify(QObject * obj, QEvent * event)

    {

        //qDebug()<<__PRETTY_FUNCTION__<<obj<<event;

        if(event->type() == QMouseEvent::MouseButtonPress)

        {

            qDebug()<<__PRETTY_FUNCTION__<<obj<<event;

        }

        return QApplication::notify(obj,event);

    }

};

相关文章

  • QT-事件

    事件 事件(event)是由系统或者 Qt 本身在不同的时刻发出的。 一些事件在对用户操作做出响应时发出,如键盘事...

  • qt-天气通软件

    title: qt-天气通软件id: 293categories: qtdate: 2015-11-27 12:2...

  • QT

    QT-读书笔记 https://docs.qq.com/doc/DUVpxdXd2d2tZc2Vt QT教程 ht...

  • QT-控件

    Qlabel QTextEdit QListView QTreeView QTableView QPushButt...

  • QT-线程

    什么是线程? 进程:程序执行分配管理资源的基本单位。分配地址(给线程) 线程:进程的一个执行单位。(线程没了,肯能...

  • QT-串口

    //获取串口信息列表 QList serialPortInfo=QSerialPortInfo::avail...

  • qt-线程分析

    线程概览 使用线程 The QThread class provides a platform-independe...

  • QT-虚拟键盘

    1、pro工程 增加 static { QTPLUGIN += qtvirtualkeyboardplugin...

  • QT-信号传递

    发送类 void send() { mit newPaper(m_name); } signals: voi...

  • 微信小程序--Json生成与解析(顺便带上QT)

    开发小程序的时候,经常会遇到Json生成与解析 今天一个UDP通信的微信小程序项目(QT-小程序)刚好用到,为了加...

网友评论

      本文标题:QT-事件

      本文链接:https://www.haomeiwen.com/subject/jmqvoctx.html