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
QT点击"X"按钮,调用closeEvent()函数来实现调用特定事件(附:粗略介绍QT的信号与槽的使用方法)的更多相关文章
- C语言:将字符串中的字符逆序输出,但不改变字符串中的内容。-在main函数中将多次调用fun函数,每调用一次,输出链表尾部结点中的数据,并释放该结点,使链表缩短。
//将字符串中的字符逆序输出,但不改变字符串中的内容. #include <stdio.h> /************found************/ void fun (char ...
- [Effective JavaScript 笔记]第17条:间接调用eval函数优于直接调用
eval函数不仅仅是一个函数.大多数函数只访问定义它们所在的作用域,而不能访问除此之外的作用域(词法作用域).eval函数具有访问调用它时的整个作用域的能力.编译器编写者首次设法优化js时,eval函 ...
- Qt error C2338: No Q_OBJECT in the class with the signal错误解决办法(无法编译过信号与槽)
由于没有继承QObject类而引起的 只需继承QObject类即可 如果已经继承了QObject类,编译还出现错误 将QObject类放在最前面继承:public QObject 最后即可编译通过
- QT从入门到入土(三)——信号和槽机制
摘要 信号槽是 Qt 框架引以为豪的机制之一.所谓信号槽,实际就是观察者模式.当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号 (signal).这种发出是没有目的的,类似广播 ...
- Qt学习--信号与槽(多窗口的实现)
按照helloword的创建过程 创建一个新的项目(项目名:window) 之后进行多窗口的实现过程: (参考:http://www.qter.org/portal.php?mod=view& ...
- JavaScript 函数——语法,调用,返回值,局部变量,全局变量,未声明变量
JavaScript 函数是被设计为执行特定任务的代码块. JavaScript 函数会在某代码调用它时被执行. ㈠函数 ⑴什么是函数 函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块. ⑵ ...
- ASP.net关于C#代码与javaScript函数的相互调用
C#代码与javaScript函数的相互调用 问:1.如何在JavaScript访问C#函数?2.如何在JavaScript访问C#变量?3.如何在C#中访问JavaScript的已有变量?4.如何在 ...
- js,JavaScript,a标签onclick传递参数不对,A标签调用js函数写法总结
错误示例: <a href="javascript:waterLineEdit(${goods.goods_id})" >修改 </a> <!-- 浏 ...
- Android使用JNI(从java调用本地函数)
当编写一个混合有本地C代码和Java的应用程序时,需要使用Java本地接口(JNI)作为连接桥梁.JNI作为一个软件层和API,允许使用本地代码调用Java对象的方法,同时也允许在Java方法中调用本 ...
随机推荐
- pyenv的使用
开始想使用virtual实现不同的版本的py隔离,然后发现不太方便,然后发现了这货. pyenv安装(ubuntu环境 ➜ ~ git clone git://github.com/yyuu/pyen ...
- Altium Designer 15 --- Design PCB Frame by Rhinoceros
step 1: Draw a PCB shape and the main component placed in the PCB. The drawing sheet should be in th ...
- w3m浏览器 for Linux
w3m是个开放源代码的文字式网页浏览器. w3m支持表格.框架.SSL连线.颜色. 如果是在适当的terminal(内核支持framebuffer)上,甚至还能显示图片. 这个软件通常尽量呈现出网页本 ...
- DNS(企业级)
构建DNS(企业级) 1.硬件选型 CPU:12C以上配置 内存:16G 网络:千兆 2.初始化系统配置 关闭 iptables service iptables stop chkconfig ipt ...
- CentOS7搭建hadoop2.6.4双节点集群
环境: CentOS7+SunJDK1.8@VMware12. NameNode虚拟机节点主机名:master,IP规划:192.168.23.101,职责:Name node,Secondary n ...
- 9月14日JavaScript循环语句作业解析
1.一张纸的厚度是0.0001米,将纸对折,对折多少次厚度超过珠峰高度8848米 解法一: var gd = 8848; var cs = 0; while(true) { cs++; gd = gd ...
- 关闭和启动adb服务命令
在运行中输入 关闭——adb kill-server 重启——adb start-server
- SSAO相关资料
http://www.gamedev.net/page/resources/_/technical/graphics-programming-and-theory/a-simple-and-pract ...
- python 函数基础介绍
函数是对程序逻辑进行结构化或过程化的一种编程方法.能将整块代码巧妙地隔离成易于管理的小块,把重复代码放在函数中而不是进行大量的拷贝. 一.函数创建 def 函数创建格式如下: def function ...
- osharp3 整合 dbcontextscope 文章2 将dbcontext的创建收回到ioc管理
osharp3 整合 dbcontextscope 后,,dbcontextscope 对dbcontext管理的很好,做到,用到时创建,不用时销毁,下面看一个 trace aspx.page: En ...