QT点击"X"按钮,调用closeEvent()函数来实现调用特定事件(附:粗略介绍QT的信号与槽的使用方法)

 背景:

  QT在用户关闭窗口(直接点击"X"键)时,程序一般都需要做一些善后的事情,就我现在的程序来说,既关闭USB。如何实现?

正文:

  首先,在对应窗体的".h"文件包含 #include <QCloseEvent>;的头文件。

  其次,在该".h"文件中声明函数 void closeEvent( QCloseEvent * event);  注意:该函数已经在QT内部建立为点击"X"按钮的槽,不能更改其函数名;

  最后,在对应窗体的".cpp"文件中实现void closeEvent(QCloseEvent * event);函数。譬如在其内部实现关闭USB,以达到窗体关闭,USB描述符也被销毁的目的。

参考文章:

  QT中关闭应用程序和窗口的函数

    http://blog.csdn.net/noif1655/article/details/10004777

  QT控件函数的重写

    http://blog.csdn.net/qustdjx/article/details/20130853

附:粗略概括QT的信号与槽的使用方法:

  以我曾写过的FakeQQ(基于LAN的通信软体)为例,

  在main函数中建立信号与槽的联系:

    QObject::connect(&Login, SIGNAL( LoginSuccess() ), &Panel, SLOT( OpenMainpanel() ) );

  以上的参数各代表什么意义呢:

  Login 与 Panel均是我创建“登录窗体”和“主面板窗体”默认生成的两个类,

  在Login类中,我创建了一个LoginSuccess()信号,用例如下

  signals:

    void Login_success(void);

  这个便是信号,不需要去实现具体的函数,只需声明就够了。QT会做剩下的工作。

  而在Panel类中,我创建了一个OpenMainpanel()的槽,用例如下: 

  Public slots:

    void OpenMainpanel(void);

  这个要注意的是,该槽需要实现具体的函数实体,该函数也就是你要具体做的事情。譬如就如该函数名称而言,打开主面板。

  那在程序中怎么使用呢,很简单:

  emit LoginSuccess();  // 发送登录成功的信号

  然后程序就会根据main里面建立的信号与槽的关系,去调用相应的槽函数,该例即代表打开主面板。

记录地点:深圳WZ

记录时间:2015年12月11日 19:49:47

原文地址:https://www.cnblogs.com/ChYQ/p/5039870.html