使用QT编辑界面,其中带来很大方便的一点就是Qt中自带丰富的、种类齐全的类及其功能函数,程序员可以在编辑程序的过程中简单地直接调用。关于窗口关闭的操作,在这里指出常用的三个槽,即quit(),exit()以及close()。

首先说明窗口退出时,系统提示对话框的代码编辑。对主程序的退出,可以调用成员函数exit(),同时也可以调用槽quit(),二者此时都能起到关闭应用程序的作用。只是应注意二者调用的方式不同。如下程序示例:

{

QApplication* app;

app->exit(0);

}

或者:

{

QApplication* app;

app->quit();

}

此时二者是等价的,即void QApplication::quit ()等价于函数调用 QApplication::exit( 0 )。此时,若需要给出用户提示,则只需要在程序当中添加QMessageBox的消息判断语句,以提示用户是否确定退出应用程序。另外,quit()作为槽,也可以连接信号和槽的形式,响应某个信号后关闭应用程序。如:

QPushButton *quitButton = new QPushButton( "Quit" );

connect( quitButton, SIGNAL(clicked()), qApp, SLOT(quit()) );

如果关闭的不是应用程序,而是关闭窗口等部件的形式,则必须调用close()函数,已关闭部件。如下:

if (!(QMessageBox::information(this,tr("CT Control View"),tr("Do you really want to log out CT Control View?"),tr("Yes"),tr("No"))))

{

this->close();

}

其中通过一条if语句,判断条件为一个对话框,根据用户的选择做出是否关闭该部件,this在这里代表当前窗口部件对象的地址。当用户选择“Yes”时,该窗口部件退出;反之则取消退出操作。

至此,我们已经简单了解了应用程序和窗口等部件的退出或关闭的代码编辑。然而,如果用户点击窗口右上角的X按键时,你会发现窗口仍然会在不给出任何提示的情况下直接退出了,即便你在程序当中已添加了提示的对话框语句。那为什么此时的关闭操作没有按我们希望的那样先给出提示对话框呢?原因是此时的关闭操作并没有引起调用带有提示消息的关闭或退出语句。当用户点击X关闭窗口时,系统会自动将这个事件告之某个特定的函数,即void QWidget::closeEvent ( QCloseEvent * e ),因此,这种情况应特别注意。在关闭窗口前,可先定义一条消息语句,以提示用户是否确定关闭窗口。如:

void mainWindow::closeEvent( QCloseEvent * event )

{

switch( QMessageBox::information( this, tr("CT Control View"),

tr("Do you really want to log out CT Control View?"),

tr("Yes"), tr("No"),

0, 1 ) )

{

case 0:

event->accept();

break;

case 1:

default:

event->ignore();

break;

}

}

编译程序后,系统会在用户响应close操作时,自动调用该语句。也许这个时候你还会问,上面的那个功能函数究竟是把它定义成槽呢,还是定义成成员函数。答案是二者都可以。一方面槽本身就是一个特殊的成员函数,除了能与信号连接之外,其功能与函数无异。另一方面,此时不需要额外设置连接信号和槽,添加该功能函数之后,窗口一旦有了close操作,机会立即响应该。

尽管添加closeEvent( QCloseEvent * event )这一功能函数之后,窗口会在关闭时给出提示对话框。但有时候还会发生这样一种情况:在点击确认关闭后,还会再会出现一个对话框,即提示对话框会出现两次。那这又是什么原因呢?其实很简单,那是因为closeEvent( QCloseEvent * event )只会响应close的操作,出现两次对话框无疑是在自定义的关闭函数中又添加一条提示对话框语句,确认关闭后,响应close操作,这时系统又会马上调用closeEvent( QCloseEvent * event )这个函数。因此,解决的办法是只定义一个带提示对话框的关闭函数,对不同的关闭操作都相应closeEvent( QCloseEvent * event )这个函数即可。

最后,如果想要在关闭主窗口或主程序时,所有打开的独立的子窗口都能同时被关闭。那么这个时候一般是在main.cpp文件中连接信号void QApplication::lastWindowClosed ();关于lastWindowClosed()的详细介绍,这里不作说明,需要使用时可以使用Qt Assistant查看其使用发法。如:

int main( int argc, char ** argv )

{

QApplication a( argc, argv );

ABMainWindow *mw = new ABMainWindow();

mw->setCaption( "Qt Example - Addressbook" );

a.setMainWidget( mw );

mw->show();

a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) );

int result = a.exec();

delete mw;

return result;

}

这样,系统会在关闭主窗口部件时,同时关闭打开的其它子窗口程序。比较值得说明的是,并不是使用了a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) )这条语句后就一定能实现该功能。在此之前,必须特别注意是否设定了主窗口部件,即调用setMainWidget这一功能函数,这样,当关闭这一主窗口部件时,才会响应关闭这一时刻已打开的其它子窗口部件。

---

转载请注明本文标题和链接:《QT中关闭应用程序和窗口的函数》

close函数 qt_QT中关闭应用程序和窗口的函数(quit(),exit()以及close()的区别)相关推荐

  1. QT中关闭应用程序和窗口的函数(quit(),exit()以及close()的区别)

    QT中关闭应用程序和窗口的函数(quit(),exit()以及close()的区别) 使用QT编辑界面,其中带来很大方便的一点就是Qt中自带丰富的.种类齐全的类及其功能函数,程序员可以在编辑程序的过程 ...

  2. close函数 qt_QT5笔记:关闭应用程序和窗口的函数

    23333 QT一坨,求一门面向傻瓜的语言. QT中 quit(),exit()以及close():常用的三个槽 对主程序的退出,可以调用成员函数exit(),同时也可以调用槽quit(),二者此时都 ...

  3. java 关闭jpanel_如何在Java中关闭Jpanel程序

    我正在制作一个Java游戏,我需要一些关于如何操作的建议.如何在Java中关闭Jpanel程序 目前我使用2个不同的.java文件来制作游戏.我有一个扩展JFrame的主程序,我调用扩展JPanel的 ...

  4. C语言基础入门48篇_20_函数入门:为什么使用函数?(函数使得程序模块化 使用函数封装细节,使得程序员只要面向函数的接口编程(参数与返回值),而不用关心函数内部细节)

    菜鸟和高手都会基本,那菜鸟为什么是菜鸟,高手为什么是高手呢?很大的区别在于,高手写的程序[结构性]更好,更容易维护.而函数就是C语言结构化的一种手段. 函数可以将大的计算任务划分为多个较小的任务(解耦 ...

  5. MFC中修改应用程序主窗口的标题

    1.第一种方法: 找到字符串资源中的IDR_MAINFRAME, 将"MyTextOut\n\nMyText\n\n\nMyTextOut.Document\nMyTextDocument& ...

  6. python 类函数 成员函数_python中的类函数、静态函数、成员函数以及类变量、成员变量...

    1 classMethodDemo():2 classVar = 'This is a class variable' #类变量,可在类函数或者成员函数中引用,为所有实例共有的 3 def __ini ...

  7. gzdeflate函数_PHP中的gzcompress、gzdeflate、gzencode函数详解_php实例

    PHP中存在一组看起来很像的压缩解压函数: 压缩函数:gzcompress gzdeflate gzencode 解压函数:gzuncompress gzinflate gzdecode gzdeco ...

  8. gzdeflate函数_PHP中的gzcompress、gzdeflate、gzencode函数详解

    这篇文章主要介绍了PHP中的gzcompress.gzdeflate.gzencode函数详解,本文深入分析了它们的相同点和不同点,需要的朋友可以参考下 PHP中存在一组看起来很像的压缩解压函数: 压 ...

  9. python匿名函数lambda_Python中什么情况下应该使用匿名函数lambda

    lambda函数一般是在函数式编程中使用的.通常学习的C/C++/Java等等都是过程式编程,所以不常接触lambda函数. 其实这货在C++中已经有所运用了,如果对stl的迭代器比较熟悉的话,就会知 ...

  10. 在计算机中关闭应用程序,电脑中如何取消点击关机后出现的还需要关闭程序的提示...

    ‍ 相信有很多用户都有遇到过在电脑中点击关机后,出现一个还需要关闭程序的提示,有时候还需要用户手动点击强制关闭的按钮才能进行关闭电脑系统的操作.不少用户觉得这个操作很多余,因此,可以按照下面的方法来取 ...

最新文章

  1. SpringMVC:注解@ControllerAdvice的工作原理
  2. a*算法流程图_单片机常用的13个C语言算法,看过的据说都晋级高手了
  3. 搜百度 php教程,jquery php 百度搜索框智能提示效果_PHP教程
  4. python socket编程实现的简单tcp迭代server
  5. firewalld配置与使用
  6. Sublime Text C# 编译(csharp.sublime-build)
  7. pip 安装 tensoflow
  8. 敢不敢做一个复杂的人
  9. mysql忘记root密码怎么办,几个简单操作步骤找回mysql密码
  10. jQuery倒计时插件
  11. 2021年网络安全学习路线指导(含视频教程)
  12. html5 拾色器原理,HTML_html5 学习简单的拾色器 ,下面是源码 需要浏览器支持htm - phpStudy...
  13. 谷歌(gmail)邮箱开启SMTP服务
  14. 【MFC】CTabSheet类之再改造
  15. switch中的PVID、VID、untag、tag概念
  16. Google翻译API使用案例
  17. 2024中山大学计算机考研信息汇总
  18. 想靠“免费”搅局智能家居,小度添添智能健身镜凭什么?
  19. openwrt双wan环境搭建以及适配UPnP
  20. PyQt4的学习历程(3)

热门文章

  1. AngularJs $http.post 数据后台获取不到数据问题 的解决过程
  2. 2022吴恩达机器学习第二周
  3. 苏格拉底、柏拉图、亚里士多德,走进希腊三贤的世界
  4. 解决页眉下划线与边框重复问题:设置页眉并保持好“距离“
  5. JavaScript中三元一次函数的解法
  6. 最好的聊天机器人平台,以建立一个聊天机器人
  7. 等红灯时使用车轱辘扫描车牌
  8. 个人关于PAT的认识心得和体会
  9. addClass(““).delay().removeClass(““);没有效果的解决方式
  10. 什么是HDMI网线延长器?浅析HDMI1.3网线延长器原理和应用