Qt编程中QDiaog的ESC建

来源:互联网 发布:流量推广软件 编辑:程序博客网 时间:2024/06/06 23:58

        最近使用QDialog时,按了下Esc键,导致QDialog被关闭,而后续的数据处理出现了问题。原来在QDialog中按下Esc键会默认调用reject()方法而不是closeEvent(QCloseEvent*event)或者其他事件。

       处理的方法:

(注意:QDialog的close()函数也是会调用reject()函数和关闭函数,若在reject()中直接调用close()也会无法关闭,要先调用hide())

(1)重新实现reject()方法

void TestDialog::reject(){   //关闭窗口,可以重新执行其他事件   this->hide();  //或者this->accept()   this->close();}

2、重写keyPressEvent(QKeyEvent *event)

void TestDialog::keyPressEvent(QKeyEvent *event){   switch(event->key()) {     //进行界面退出,重写Esc键,否则重写reject()方法      case Qt::Key_Escape:          this->close();          break;      default:         QDialog::keyPressEvent(event);   }}

       以上者两种方法都可以解决Esc键触发的问题,当然这只是在QDialog中是这种情况。在QWidget中没有reject ()和accept()槽函数,但可以通过keyPressEvent(QKeyEvent*event)来制定Esc键的功能。

2 0