首页 > 代码库 > 界面关闭的事件响应
界面关闭的事件响应
最近使用了窗口关闭事件: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置35 {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()函数的使用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。