Qt编程中QDiaog的ESC键(按下Esc键会默认调用reject()方法)

Posted 朝闻道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt编程中QDiaog的ESC键(按下Esc键会默认调用reject()方法)相关的知识,希望对你有一定的参考价值。

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

       处理的方法:

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

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

[html] view plain copy
 
  1. void TestDialog::reject()  
  2. {  
  3.    //关闭窗口,可以重新执行其他事件  
  4.    this->hide();  //或者this->accept()  
  5.    this->close();  
  6. }  

2、重写keyPressEvent(QKeyEvent *event)

 

[html] view plain copy
 
  1. void TestDialog::keyPressEvent(QKeyEvent *event)  
  2. {  
  3.    switch(event->key()) {  
  4.      //进行界面退出,重写Esc键,否则重写reject()方法  
  5.       case Qt::Key_Escape:  
  6.           this->close();  
  7.           break;  
  8.   
  9.       default:  
  10.          QDialog::keyPressEvent(event);  
  11.    }  
  12. }  

 

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

 

http://blog.csdn.net/taiyang1987912/article/details/48053575

以上是关于Qt编程中QDiaog的ESC键(按下Esc键会默认调用reject()方法)的主要内容,如果未能解决你的问题,请参考以下文章

qt之esc键

查找大小调整操作中是不是按下了 Esc 键(MouseLeftButtonDown+MouseMove)

jquery 使用 esc 键返回输入的先前值

Swing:按下 ESC 键时如何关闭对话框?

(转)vim中多行注释

用c语言模仿windows界面和接收esc之类的功能键的问题