码迷,mamicode.com
首页 > 其他好文 > 详细

14事件的接受与忽略

时间:2018-06-22 23:53:53      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:点击   .com   int   push   传递   break   --   ase   event   

事件的接受与忽略

      前面讲过很多事件处理器也有事件。但是有些事件不想处理,或是事件传递的顺序又是如何的。

 

例子:

      在设计器中放入一个按钮,同时定义一个点击事件和信号。那么响应的顺序是怎样的?

//点击事件

void Button::mousePressEvent(QMouseEvent *e)

{

    if(e->button()==Qt::LeftButton)

    {

       qDebug()<<"左键按钮被按下";

    }

    else

    {

        Button::mousePressEvent(e);

    }

}

 

//信号

    connect(ui->pushButton,&Button::clicked,

            [=]()

            {

               qDebug()<<"按钮被按下";

            }

);

 

结果是只显示:"左键按钮被按下",而"按钮被按下"没有被显示,难道信号没有发出去?

注意:事件被接受后,不会往下传递。

    if(e->button()==Qt::LeftButton)

    {

       qDebug()<<"左键按钮被按下";

}

上句就是处理事件,那么事件不会流向其他控件或是窗口。

 

改成:

    if(e->button()==Qt::LeftButton)

    {

       qDebug()<<"左键按钮被按下";

        e->ignore();

}

 

e->ignore()表示事件被忽略。

 

此时发现事件被忽略,输出是:"左键按钮被按下",而"按钮被按下"没有被显示,事件被忽略了,传递给谁了?不是其父类?

在窗口中再定义一个点击事件:

void QWidget::mousePressEvent(QMouseEvent *e)

{

    qDebug()<<"-----------";

}

 

结果显示,只要一点击按钮就显示:

左键按钮被按下-----------左键按钮被按下-----------左键按钮被按下-----------

点击按钮以外,则显示:-----------;

 

结论:事件传递了父组件,不是给父类(基类)

技术分享图片

 

{

ui->setupUi(this);

// 继承自定义的Button类

    connect(ui->pushButton,&Button::clicked,

            [=]()

            {

               qDebug()<<"按钮被按下";

            }

    );

}

 

void QWidget::mousePressEvent(QMouseEvent *e)

{

    qDebug()<<"-----------";

}

 

 

事件的接受和忽略可以应用的消息框。

void Widget::closeEvent(QCloseEvent *e)

{

    int nRet=QMessageBox::question(this,"窗口","是否要关闭");

    switch (nRet) {

    case QMessageBox::Yes:

        e->accept();

        break;

    case QMessageBox::No:

        e->ignore();

        break;

    }

}

 

当点击“确认”时,就接受事件进行处理,否则直接忽略。

 

14事件的接受与忽略

标签:点击   .com   int   push   传递   break   --   ase   event   

原文地址:https://www.cnblogs.com/gd-luojialin/p/9215737.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!