界面关闭的事件响应

最近使用了窗口关闭事件:void QWidget::closeEvent ( QCloseEvent * event ) [virtual protected]

当用鼠标点击关闭按钮或者在任务栏上右击关闭,都会触发这一事件,实现效果如下:

附上实现代码:

这是主界面的关闭事件(CallTrace为主界面)

 1 void CallTrace::closeEvent(QCloseEvent *e)
 2 {
 3     closeDialog = new CloseDialog;
 4     closeDialog->move((QApplication::desktop()->width() - closeDialog->width())/2,
 5                       (QApplication::desktop()->height() - closeDialog->height())/2);
 6     closeDialog->exec();
 7     if (closeDialog->m_flag)//先判断没有出错
 8     {
 9         if (closeDialog->m_flag == 3)//窗口不关闭
10             {
11             e->ignore();
12         }
13         else if (closeDialog->m_flag == 2)//立即关闭
14             {
15                 //关闭线程
16                 pTaskInstance->m_CDR.StopCdr();
17                 emit mysig();        //发射信号,记录窗口及线程状态
18         }
19         else if (closeDialog->m_flag == 1)//隐藏到后台
20         {
21             //什么都不用做
22         }
23     }
24 }
 1 CloseDialog::CloseDialog()
 2 {
 3     m_flag = 0;//窗口关闭选项的初始化
 4     QGroupBox *closeSelection = new QGroupBox(tr("关闭选项"));
 5     hide = new QRadioButton(tr("隐藏到后台"));
 6     hide->setChecked(true);
 7     holdOn = new QRadioButton(tr("立即关闭"));
 8
 9     QVBoxLayout *vLayout1 = new QVBoxLayout;
10     vLayout1->addWidget(hide);
11     vLayout1->addWidget(holdOn);
12     closeSelection->setLayout(vLayout1);
13
14     QHBoxLayout *hLayout1 = new QHBoxLayout;
15     okBtn = new QPushButton(tr("确定"));
16     cancelBtn = new QPushButton(tr("取消"));
17     hLayout1->addStretch();
18     hLayout1->addWidget(okBtn);
19     hLayout1->addSpacing(10);
20     hLayout1->addWidget(cancelBtn);
21     hLayout1->addStretch();
22
23     QHBoxLayout *hLayout2 = new QHBoxLayout;
24     closeCbox = new QCheckBox;
25     closeCbox->setText(tr("默认此选项,以后不再提示"));
26     hLayout2->addWidget(closeCbox);
27
28     QVBoxLayout *mainLayout = new QVBoxLayout;
29     mainLayout->addWidget(closeSelection);
30     mainLayout->addLayout(hLayout2);
31     mainLayout->addLayout(hLayout1);
32
33     setLayout(mainLayout);
34     setWindowTitle(tr("提示"));
35     this->resize(400,200);
36
37     connect(okBtn,SIGNAL(clicked()),this,SLOT(ok_PushButton_Clicked()));
38     connect(cancelBtn,SIGNAL(clicked()),this,SLOT(cancel_PushButton_Clicked()));
39 }
1 //弹出小窗口关闭
2 void CloseDialog::closeEvent(QCloseEvent *e)
3 {
4     if (!m_flag)//若直接关闭对话框,m_flag置3
5         {
6         m_flag = 3;//保持原状态,不关闭
7     }
8 }
//确定按钮 1 void CloseDialog::ok_PushButton_Clicked()
 2 {
 3     if (hide->isChecked())
 4         {
 5         m_flag = 1;//隐藏到后台
 6     }
 7     else if (holdOn->isChecked())
 8         {
 9         m_flag = 2;//立即关闭
10     }
11     this->close();
12 }
13
14 //取消按钮
15 void CloseDialog::cancel_PushButton_Clicked()
16 {
17     m_flag = 3;//保持原状态,不关闭
18     this->close();
19 }
//.h文件 1 class CloseDialog : public QDialog
 2 {
 3     Q_OBJECT
 4 public:
 5     CloseDialog();
 6     ~CloseDialog();
 7
 8 public:
 9     QRadioButton *hide;
10     QRadioButton *holdOn;
11     QPushButton *okBtn;
12     QPushButton *cancelBtn;
13     QCheckBox *closeCbox;
14     int m_flag;                         //标志,记录隐藏窗口还是关闭 1隐藏到后台,2立即关闭,3不改变,0错误
15
16 protected:
17     void closeEvent(QCloseEvent *e);//窗口关闭时调用
18 public slots:
19     void ok_PushButton_Clicked();
20     void cancel_PushButton_Clicked();
21 };
主要就是 closeEvent(QCloseEvent *e)和ignore()函数的使用

界面关闭的事件响应

时间: 2024-08-07 05:14:30

界面关闭的事件响应的相关文章

【IOS 开发】IOS 开发 简介 (IOS项目文件 | MVC 模式 | 事件响应机制 | Storyboard 控制界面 | 代码控制界面 | Retina 屏幕图片适配)

一. IOS 项目简介 1. IOS 文件简介 创建一个 HelloWorld 项目, 在这个 IOS 项目中有四个目录 : 如下图; -- HelloWorldTests 目录 : 单元测试相关的类和资源; (1) HelloWorld 目录 HelloWorld 目录介绍 : -- 命名规则 : 该目录名称与 IOS 项目名称相同, 是主目录; -- 存放内容 : IOS 项目的 源码文件, 界面设计文件, 资源文件都存放在该目录下; -- 源文件 : Objective C 的 .m 和

测试事件响应修改界面内容

package com.swing.demo; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing

cceditbox和cocostudio联合界面点击事件无响应问题,Android中创建文件夹问题

这两个问题折腾了我一天多时间,尽快下班时候把创建文件夹问题给解决了,刚把cceditbox点击事件无响应问题解决了.真是大爽. 1.创建文件夹 _mkdir()这个c函数就行,在vs ide中,定位的头文件是direct.h,但是这个文件不被ndk编译通过,没有这个文件.好吧,死脑筋,开始怀疑eclipse库路径设置有问题,但是不知道哪不对,搜索到了头大地步,好吧,认真仔细一看,原来是在ndk中,_mkdir函数放在了#include <sys/stat.h>中,改为这个头文件就行了. 2.点

【JavaScript学习】-事件响应,让网页交互

什么是事件: JavaScript 创建动态页面.事件是可以被 JavaScript 侦测到的行为. 网页中的每个元素都可以产生某些可以触发 JavaScript 函数或程序的事件. 比如说,当用户单击按钮或者提交表单数据时,就发生一个鼠标单击(onclick)事件,需要浏览器做出处理,返回给用户一个结果. 主要事件表: 事件1:onclick 说明:onclick是鼠标单击事件,当在网页上单击鼠标时,就会发生该事件.同时onclick事件调用的程序块就会被执行,通常与按钮一起使用. 实例代码:

JavaScript高级用法一之事件响应与网页交互

综述 本篇的主要内容来自慕课网,事件响应与网页交互,主要内容如下 1 什么是事件 2 鼠标单击事件( onclick ) 3 鼠标经过事件(onmouseover) 4 鼠标移开事件(onmouseout) 5 光标聚焦事件(onfocus) 6 失焦事件(onblur) 7 内容选中事件(onselect) 8 文本框内容改变事件(onchange) 9 加载事件(onload) 10 卸载事件(onunload) 什么是事件 JavaScript 创建动态页面.事件是可以被 JavaScri

android view、viewgroup 事件响应拦截处理机制

文章中会用到部分网络资源,首先将原作者的链接附上. 但是还是会附上数量较大的关于此部分内容的自己的思考. ------------------------------------------------------------------------------------write by mcdullsin 将原作者的链接附上可以为搜索引擎评价原始作者的文章提供自己能力所及的帮助,也算是对分享自己技术的各位前辈的一种感激吧. 1.android编程下touch事件的分发和消费机制 2.andr

java事件响应方法汇总(容器类监听、监听器类、AbstractAction、反射)

Java图形用户界面中,处理事件时所必须的步骤是: 1.创建接受响应的组件(控件)2.实现相关事件监听接口3.注册事件源的动作监听器4.事件触发时的事件处理 相应的可以通过以下的集中方式来作出事件响应. [java] view plaincopyprint? <span style="font-size: 18px;">一.容器类监听 效果:单击窗体中的三个按钮,实现相应的相应时间. </span><pre class="java" n

DuiLib事件分析(一)——鼠标事件响应

最近在处理DuiLib中自定义列表行元素事件,因为处理方案得不到较好的效果,于是只好一层一层的去剥离DuiLib事件是怎么来的,看能否在某一层截取消息,自己重写. 我这里使用CListContainerElementUI行元素,元素中有插入button,平时行元素不显示,鼠标移动上去显示出来,鼠标移走就隐藏button.Duilib自己是不带这个功能的,它有一个鼠标移动上去的热点事件,按理说重写热点事件就好了.但是当时比较急没找到怎么触发的,之后一直没继续走这条思路.后来找到源码事件里面有 vo

JavaScript系列二:变量、数组、流程控制、函数以及事件响应

JavaScript入门内容的复习:JavaScript入门 输出内容 document.write("xxx"); 弹出警告窗口 alert("xxx"); 弹出确认窗口 confirm("xxx"); 弹出提问窗口 prompt("xxx"); 单行注释 // 多行注释 /* */ 函数语法格式 function xxx() { xxxx; } 引入JS外部文件的方式 <script src="xx.js&