zoukankan      html  css  js  c++  java
  • 14事件的接受与忽略

    事件的接受与忽略

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

    例子:

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

    //点击事件

    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;

        }

    }

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

  • 相关阅读:
    属性选择器(通常用在input)
    函数调用的文档注释
    List集合操作
    数组排序三种方法
    字符串反序输出字符串
    js中完美运动框架
    查找100-200之间是否存在水仙花数
    提示用户输入一个正整数,如果错误,则重新输入,可以使用以下的代码来保证用户输入正确:
    Ubuntu 16.10下的 jdk 1.8.0_111
    方法内部类
  • 原文地址:https://www.cnblogs.com/gd-luojialin/p/9215737.html
Copyright © 2011-2022 走看看