Qt: 窗口的显示和隐藏_qt释放还是隐藏对话框dialog.accept()-程序员宅基地

技术标签: Qt 笔记  qt  

隐藏窗口

1. hide()

Hides the widget.

This function is equivalent to setVisible(false).

Note: If you are working with QDialog or its subclasses and you invoke the show() function after this function, the dialog will be displayed in its original position.

2. setVisible(false)

Calling setVisible(false) or hide() hides a widget explicitly.

An explicitly hidden widget will never become visible, even if all its ancestors become visible, unless you show it.

3. lower()

Lowers the widget to the bottom of the parent widget’s stack.

After this call the widget will be visually behind (and therefore obscured by) any overlapping sibling widgets.

4. close()

Closes this widget.

Returns true if the widget was closed; otherwise returns false.

First it sends the widget a QCloseEvent. The widget is hidden if it accepts the close event. If it ignores the event, nothing happens. The default implementation of QWidget::closeEvent() accepts the close event.

If the widget has the Qt::WA_DeleteOnClose(widget attribute, which is set and cleared with void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on = true)) flag, the widget is also deleted. (the difference with hide())

this->setAttribute(Qt::WA_DeleteOnCLose, true);

A close events is delivered to the widget no matter if the widget is visible or not.

The QApplication::lastWindowClosed() signal is emitted when the last visible primary window (i.e. window with no parent) with the Qt::WA_QuitOnClose attribute set is closed. By default this attribute is set for all widgets except transient windows such as splash screens, tool windows, and popup menus.

5. hideEvent()

This event handler is called with the given event when Qt receives a window close request for a top-level widget from the window system.

By default, the event is accepted and the widget is closed.

You can reimplement this function to change the way the widget responds to window close requests. For example, you can prevent the window from closing by calling ignore() on all events.

  void MainWindow::closeEvent(QCloseEvent *event)
  {
    
      if (maybeSave()) {
    
          writeSettings();
          event->accept();
      } else {
    
          event->ignore();
      }
  }

 

显示窗口

1. show()

Shows the widget and its child widgets.

This is equivalent to calling showFullScreen(), showMaximized(), or setVisible(true), depending on the platform’s default behavior for the window flags.

2. setVisible(true)

Calling setVisible(true) or show() sets the widget to visible status if all its parent widgets up to the window are visible.

If an ancestor is not visible, the widget won’t become visible until all its ancestors are shown.

If its size or position has changed, Qt guarantees that a widget gets move and resize events just before it is shown.

If the widget has not been resized yet, Qt will adjust the widget’s size to a useful default using adjustSize().

A widget that happens to be obscured by other windows on the screen is considered to be visible.

3. raise()

Raises this widget to the top of the parent widget’s stack.

After this call the widget will be visually in front of any overlapping sibling widgets.

4. exec()

 int QDialog::exec()

Shows the dialog as a modal dialog, blocking until the user closes it.

The function returns a DialogCode result.

QDialog::Accepted 1

QDialog::Rejected 0

If the dialog is application modal, users cannot interact with any other window in the same application until they close the dialog.

If the dialog is window modal, only interaction with the parent window is blocked while the dialog is open.

By default, the dialog is application modal.

用法

当需要一直显示一个窗口时,用 exec(),不同于 show()exec() 显示的只能是 模态窗口,且只要去关闭窗口,操作权会一直在该窗口,开启事件循环,直到关闭该窗口。

关闭窗口常用函数有:
1、accept()

void QDialog::accept()

Hides the modal dialog and sets the result code to Accepted.

该函数只隐藏窗口,并不删除窗口,并设置返回值为 Accepted

2、reject()

void QDialog::reject()

Hides the modal dialog and sets the result code to Rejected.
该函数同样隐藏窗口,并返回值 Rejected

3、done(int r)

 void QDialog::done(int r)

Closes the dialog and sets its result code to r. If this dialog is shown with exec(), done() causes the local event loop to finish, and exec() to return r.

As with QWidget::close(), done() deletes the dialog if the Qt::WA_DeleteOnClose flag is set.
If the dialog is the application’s main widget, the application terminates.
If the dialog is the last window closed, the QApplication::lastWindowClosed() signal is emitted.

该函数 close 窗口,窗口会隐藏,是否删除取决于是否设置 Qt::WA_DeleteOnClose 。且该函数可以自己设置返回值。

这样可以利用返回值做出相应判断,如显示一个需要根据用户选择而决定下一步操作的对话框,如有三个选项:ABC,可以根据不同选择用 done() 函数设置不同返回值,从而进行不同处理。

4、setResult(int i)

void QDialog::setResult(int i)

Sets the modal dialog’s result code to i.

5. showEvent() ?

[virtual protected] void QWidget::showEvent(QShowEvent *event)

This event handler can be reimplemented in a subclass to receive widget show events which are passed in the event parameter.

Non-spontaneous show events are sent to widgets immediately before they are shown.

The spontaneous show events of windows are delivered afterwards.

Note: A widget receives spontaneous show and hide events when its mapping status is changed by the window system, e.g. a spontaneous hide event when the user minimizes the window, and a spontaneous show event when the window is restored again.

After receiving a spontaneous hide event, a widget is still considered visible in the sense of isVisible(). (why???)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Lee567/article/details/106162978

智能推荐

mnn linux编译_mnn 编译linux-程序员宅基地

文章浏览阅读3.7k次。https://www.yuque.com/mnn/cn/cvrt_linux_mac基础依赖这些依赖是无关编译选项的基础编译依赖• cmake(3.10 以上)• protobuf (3.0 以上)• 指protobuf库以及protobuf编译器。版本号使用 protoc --version 打印出来。• 在某些Linux发行版上这两个包是分开发布的,需要手动安装• Ubuntu需要分别安装 libprotobuf-dev 以及 protobuf-compiler 两个包•..._mnn 编译linux

利用CSS3制作淡入淡出动画效果_css3入场效果淡入淡出-程序员宅基地

文章浏览阅读1.8k次。CSS3新增动画属性“@-webkit-keyframes”,从字面就可以看出其含义——关键帧,这与Flash中的含义一致。利用CSS3制作动画效果其原理与Flash一样,我们需要定义关键帧处的状态效果,由CSS3来驱动产生动画效果。下面讲解一下如何利用CSS3制作淡入淡出的动画效果。具体实例可参考刚进入本站时的淡入效果。1. 定义动画,名称为fadeIn@-webkit-keyf_css3入场效果淡入淡出

计算机软件又必须包括什么,计算机系统应包括硬件和软件两个子系统,硬件和软件又必须依次分别包括______?...-程序员宅基地

文章浏览阅读2.8k次。计算机系统应包括硬件和软件两个子系统,硬件和软件又必须依次分别包括中央处理器和系统软件。按人的要求接收和存储信息,自动进行数据处理和计算,并输出结果信息的机器系统。计算机是脑力的延伸和扩充,是近代科学的重大成就之一。计算机系统由硬件(子)系统和软件(子)系统组成。前者是借助电、磁、光、机械等原理构成的各种物理部件的有机组合,是系统赖以工作的实体。后者是各种程序和文件,用于指挥全系统按指定的要求进行..._计算机系统包括硬件系统和软件系统 软件又必须包括

MYSQL 查找单个字段或者多个字段重复数据,清除重复数据_mysql查询某个字段重复的数据-程序员宅基地

文章浏览阅读4w次,点赞85次,收藏305次。前文重复数据的情况分为两种:单个字段 数据重复多个字段 数据重复所以该篇的内容就是包括单个字段的重复数据查找 与 去重多个字段的重复数据查找 与 去重正文示例 accountinfo 表数据如下:场景一 单个字段重复数据查找 & 去重我们要把上面这个表中 单个字段 account字段相同的数据找出来。思路 分三步 简述:第一步要找出重复数据,我们首先想到的就是,既然是重复,那么数量就是大于 1..._mysql查询某个字段重复的数据

【转】用 Eclipse 平台的CDT控件进行 C/C++ 开发-程序员宅基地

文章浏览阅读88次。原文地址:http://www.ibm.com/developerworks/cn/linux/opensource/os-ecc/用 Eclipse 平台进行 C/C++ 开发Pawel Leszek 是 Studio B 的一位作家,他是一位专长于 Linux/Win/Mac OS 系统体系结构和管理的独立软件顾问和作家。他具有许多操作系统、编程语言和网络协议方面的经验..._eclipse c++ 创建控件

unity 下一帧执行_Unity中的Havok Physics物理引擎-程序员宅基地

文章浏览阅读737次。在GDC 2019上,我们宣布将Havok Physics作为预览版资源包加入到Unity资源包管理器,这意味着所有Unity开发者都可以使用这款知名的物理引擎。在当今主机平台中,Havok Physics应用于超过半数的主机游戏大作,出色地满足了用户的物理模拟需求。当我们推出面向数据技术栈DOTS,尝试定义物理模拟的未来时,我们决定寻找有相同核心理念和价值观的合作伙伴。通过与Havok..._unity havok physics

随便推点

eclipse安装教程_ecjelm-程序员宅基地

文章浏览阅读790次,点赞3次,收藏4次。官网下载下载链接:http://www.eclipse.org/downloads/点击Download下载完成后双击运行我选择第2个,看自己需要(我选择企业级应用,如果只是单纯学习java选第一个就行)进入下一步后选择jre和安装路径修改jvm/jre的时候也可以选择本地的(点后面的文件夹进去),但是我们没有11版本的,所以还是用他的吧选择接受安装中安装过程中如果有其他界面弹出就点accept就行..._ecjelm

Linux常用网络命令_ifconfig 删除vlan-程序员宅基地

文章浏览阅读245次。原文链接:https://linux.cn/article-7801-1.htmlifconfigping <IP地址>:发送ICMP echo消息到某个主机traceroute <IP地址>:用于跟踪IP包的路由路由:netstat -r: 打印路由表route add :添加静态路由路径routed:控制动态路由的BSD守护程序。运行RIP路由协议gat..._ifconfig 删除vlan

redux_redux redis-程序员宅基地

文章浏览阅读224次。reduxredux里要求把数据都放在公共的存储区域叫store里面,组件中尽量少放数据,假如绿色的组件要给很多灰色的组件传值,绿色的组件只需要改变store里面对应的数据就行了,接着灰色的组件会自动感知到store里的数据发生了改变,store只要有变化,灰色的组件就会自动从store里重新取数据,这样绿色组件的数据就很方便的传到其它灰色组件里了。redux就是把公用的数据放在公共的区域去存..._redux redis

linux 解压zip大文件(解决乱码问题)_linux 7za解压中文乱码-程序员宅基地

文章浏览阅读2.2k次,点赞3次,收藏6次。unzip版本不支持4G以上的压缩包所以要使用p7zip:Linux一个高压缩率软件wget http://sourceforge.net/projects/p7zip/files/p7zip/9.20.1/p7zip_9.20.1_src_all.tar.bz2tar jxvf p7zip_9.20.1_src_all.tar.bz2cd p7zip_9.20.1make && make install 如果安装失败,看一下报错是不是因为没有下载gcc 和 gcc ++(p7_linux 7za解压中文乱码

Http请求中获取请求的真实的IP地址_获取http请求ip-程序员宅基地

文章浏览阅读2.1w次,点赞6次,收藏31次。获取客户端IP一、标题网络上常见的请求头1、X-Forwarded-For2、Proxy-Client-IP3、WL- Proxy-Client-IP4、HTTP_CLIENT_IP5、X-Real-IP二、注意事项1、非标准请求头2、不一定存在3、多重代理顺序4、请求头伪造三、代码场景样例一、标题网络上常见的请求头1、X-Forwarded-For这是一个 Squid 开发的字段,只有在通过了 HTTP 代理或者负载均衡服务器时才会添加该项。格式为X-Forwarded-For: client1, _获取http请求ip

AS400 API 从零到一的整个历程-程序员宅基地

文章浏览阅读1.2k次。简单的分享,如果有不一样的见解可以一起讨论1)AS400上安装对应的577ODG1 这个软件如果你不知道有没有装,你可以通过GO LICPGM 这个命令,10 去看到哪些安装的软件怎么安装具体如下:1. To install the libraries, run the command 2. Select option 11 to install a Licensed Program and install option 39如果发现有IBM HTTP Server For I2)启动 HTTP 服务,这是_as400