[Qt] postevent emit ----event与signal

原创 2011年08月27日 00:31:54



signal发送的方式:emit
event发送的方式:
    1:窗口系统事件;
(QEvent::Type中列出的,些值最好定义成大于5000的值,如:const QEvent::Type CustomEvent_Login = (QEvent::Type)5001;
    2:由sendEvent()/postEvent()手动发送;
(我比较喜欢用postEvent,提交方式,什么时候处理交给Qt system决定,方式温和、不容易出错;sendEvent是提交后,就得立即处理,,好像出错的概念更大些,更不容易操作。)
event与signal的关系:两者没有必然的关系。只是event发生时,在事件处理函数中有时会调用emit发送一个信号。
bool QObject::event( QEvent *e)
{
#if defined(CHECK_NULL)
    if ( e == 0)
    qWarning("QObject::event: Null events are not permitted" );
#endif
    if (eventFilters ){          // try filters
       if (activate_filters(e))     // stopped by a filter
          return TRUE;
    }
    switch (e->type() ) {
    case QEvent::Timer:
       timerEvent((QTimerEvent*)e );
       returnTRUE;
    case QEvent::ChildInserted:
    case QEvent::ChildRemoved:
       childEvent((QChildEvent*)e );
       returnTRUE;
    default:
       break;
    }
    returnFALSE;
}

//QObject::event()在QWidget中被重新实现,对event的处理变得更完善。
bool QWidget::event( QEvent *e )

{
    if ( QObject::event( e ) )
    return TRUE;
 
    switch ( e->type() ) {
    case QEvent::MouseMove:
        mouseMoveEvent( (QMouseEvent*)e );
        break;
 
    case QEvent::MouseButtonPress:
        mousePressEvent( (QMouseEvent*)e );
        break;
 
    case QEvent::MouseButtonRelease:
        mouseReleaseEvent( (QMouseEvent*)e );
        break;
 
    case QEvent::MouseButtonDblClick:
        mouseDoubleClickEvent( (QMouseEvent*)e );
        break;
 
    case QEvent::Wheel:
        wheelEvent( (QWheelEvent*)e );
        if ( ! ((QWheelEvent*)e)->isAccepted() )
        return FALSE;
        break;
    case QEvent::KeyPress: {
        QKeyEvent *k = (QKeyEvent *)e;
        bool res = FALSE;
        if ( k->key() == Key_Backtab ||
         (k->key() == Key_Tab &&
          (k->state() & ShiftButton)) ) {
        QFocusEvent::setReason( QFocusEvent::Tab );
        res = focusNextPrevChild( FALSE );
        QFocusEvent::resetReason();
 
        } else if ( k->key() == Key_Tab ) {
        QFocusEvent::setReason( QFocusEvent::Tab );
        res = focusNextPrevChild( TRUE );
        QFocusEvent::resetReason();
        }
        if ( res )
        break;
        QWidget *w = this;
        while ( w ) {
        w->keyPressEvent( k );
        if ( k->isAccepted() || w->isTopLevel() )

Qt postEvent

关于Qt postEvent 呵呵,转载了这么多别人的关于Event方面的文章,我也来说说两三句吧 前几天一直被这个postEvent给困扰着,所以主要讲解postEv...
  • dreamtdp
  • dreamtdp
  • 2012-05-08 11:51:51
  • 11417

Qt中emit的作用

调用findPrevious或者findNext信号对应的槽函数,emit  把connect把信号和槽进行关联,emit某个信号,就相当于调用这个信号connect时所关联的槽函数,如下边的例程所示...
  • haifengid
  • haifengid
  • 2016-06-25 07:49:34
  • 2642

Qt之emit、signals、slot的使用

Qt信号与槽的使用方法
  • zong596568821xp
  • zong596568821xp
  • 2017-12-28 00:07:07
  • 246

Qt emit的使用

假设现在我定义了一个类A,现在想在A的一个函数void A::function1()当中的结尾处emit一个信号signal1(),然后利用这个信号触发另一个类B进行某项操作void B::funct...
  • guochang7511
  • guochang7511
  • 2014-04-14 14:16:43
  • 4327

Qt中的emit

看下面的代码: signals: void findPrevious(const QString &str, Qt::CaseSensitivity cs); private slot...
  • shensens
  • shensens
  • 2013-07-09 09:17:19
  • 2404

QT的signal和slot的几种常见使用场景

本文介绍了QT中的Signal和Slot使用的几种场景。
  • nirendao
  • nirendao
  • 2016-03-03 23:34:17
  • 3930

QT核心:signal-slot 信号/槽机制 最详细最通俗易懂的一篇

原创翻译:信号&槽(QT 基础) crystalblue,sand.fj.wen翻译 cxt_programmer校正 2010-10-22 14:55| 发布者: Vincent| 查看: 1...
  • zkl99999
  • zkl99999
  • 2016-12-21 16:51:10
  • 5344

QEvent postEvent/sendEvent

可以自訂事件類型,最簡單的方式,是透過QEvent::Type指定事件類型的常數值,在建構QCustomEvent時作為建構引數並透過postEvent()傳送事件,例如:const QEvent::...
  • dongfangyu
  • dongfangyu
  • 2010-10-12 17:23:00
  • 4880

QT 之 sendEvent & PostEvent

QT文档中这样解释: sendEvent(QObject* receiver,QEvent* event) 使用notify()函数直接给receiver发送事件。 postEvent(QObj...
  • king523103
  • king523103
  • 2015-05-29 09:12:41
  • 4073
收藏助手
不良信息举报
您举报文章:[Qt] postevent emit ----event与signal
举报原因:
原因补充:

(最多只允许输入30个字)