QT界面窗口的显示和隐藏,关闭

QT窗口的显示和隐藏:

1、隐藏窗口

1. hide()
2. setVisible(false)
3. lower()
4. close()
5. hideEvent()

1.1、介绍:

1. hide()
	隐藏
	隐藏小部件。

	此函数等效于 setVisible(false)。

	注意:如果您正在使用 QDialog 或其子类并在此函数之后调用 show() 函数,则对话框将显示在其原始位置。
	
	
2. setVisible(false)
	设置是否可见
	true/false,真/假
	调用 setVisible(false) 或 hide() 显式隐藏小部件。

	一个显式隐藏的小部件永远不会变得可见,即使它的所有祖先都变得可见,除非你显示它。
	
	
3. lower()
	降低
	将小部件降低到父小部件堆栈的底部。

	在此调用之后,小部件将在视觉上位于任何重叠的兄弟小部件的后面(因此被遮挡)。
	
	
4. close()
	关闭
	
	关闭此小部件。

	如果小部件已关闭,则返回 true;否则返回假。

	首先,它向小部件发送一个 QCloseEvent。如果小部件接受关闭事件,则它会被隐藏。如果它忽略该事件,则不会发生任何事情。 QWidget::closeEvent() 的默认实现接受关闭事件。

	如果小部件具有 Qt::WA_DeleteOnClose(widget 属性,使用 void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on = true)) 标志设置和清除,则小部件也会被删除。 (与 hide() 的区别)

	this->setAttribute(Qt::WA_DeleteOnCLose, true);
	
	无论小部件是否可见,都会将关闭事件传递给小部件。

	当具有 Qt::WA_QuitOnClose 属性集的最后一个可见主窗口(即没有父窗口)关闭时,会发出 QApplication::lastWindowClosed() 信号。默认情况下,为所有小部件设置此属性,但瞬态窗口除外,例如启动屏幕、工具窗口和弹出菜单。
			
			
5. hideEvent()
	隐藏事件
	当 Qt 从窗口系统接收到对顶级窗口部件的窗口关闭请求时,使用给定事件调用此事件处理程序。

	默认情况下,接受事件并关闭小部件。

	您可以重新实现此函数以更改小部件响应窗口关闭请求的方式。例如,您可以通过对所有事件调用 ignore() 来阻止窗口关闭。

2、显示窗口

1. show()
2. setVisible(true)
3. raise()
4. exec()
5. showEvent()

2.1、介绍:

1. show()
	显示
	显示小部件及其子小部件。

	这相当于调用 showFullScreen()、showMaximized() 或 setVisible(true),具体取决于平台对窗口标志的默认行为。
	
	
2. setVisible(true)
	设置是否可见
	true/false,真/假
	
	如果直到窗口的所有父小部件都可见,则调用 setVisible(true) 或 show() 将小部件设置为可见状态。

	如果祖先不可见,则小部件将在其所有祖先都显示之前不会变为可见。

	如果它的大小或位置发生了变化,Qt 保证一个小部件在它显示之前得到移动和调整大小事件。

	如果小部件尚未调整大小,Qt 将使用 adjustSize() 将小部件的大小调整为有用的默认值。

	碰巧被屏幕上的其他窗口遮挡的小部件被认为是可见的。

3. raise()
	提高
	
	将此小部件提升到父小部件堆栈的顶部。

	在此调用之后,小部件将在视觉上位于任何重叠的同级小部件的前面。

4. exec()
	int QDialog::exec()

	显示的只能是 模态窗口,且只要去关闭窗口,操作权会一直在该窗口,开启事件循环,用户关闭它之前一直处于阻塞状态。直到关闭该窗口。

	该函数返回一个 DialogCode 结果。

			QDialog::Accepted接受 1

			QDialog::Rejected拒绝 0
	1、如果对话框是应用程序模式,则用户在关闭对话框之前不能与同一应用程序中的任何其他窗口进行交互。

	2、如果对话框是窗口模式,则在对话框打开时仅阻止与父窗口的交互。

	3、默认情况下,对话框是应用程序模式。
	显示的只能是 模态窗口,且只要去关闭窗口,操作权会一直在该窗口,开启事件循环,直到关闭该窗口。
	
	
5. showEvent()
	显示事件
	
	此事件处理程序可以在子类中重新实现,以接收在事件参数中传递的小部件显示事件。

	非自发的显示事件在显示之前立即发送到小部件。

	窗口的自发展示事件随后交付。

	注意:当窗口系统更改其映射状态时,小部件会收到自发的显示和隐藏事件,例如 用户最小化窗口时的自发隐藏事件,以及再次恢复窗口时的自发显示事件。

	在收到一个自发的隐藏事件后,在 isVisible() 的意义上,一个小部件仍然被认为是可见的。

3、关闭窗口常用函数有:

1、accept()

void QDialog::accept()

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

2、reject()

void QDialog::reject()

该函数同样隐藏窗口,并返回值 Rejected拒绝。

3、done(int r)

void QDialog::done(int r)

关闭对话框并将其结果代码设置为 r。 如果此对话框与 exec() 一起显示,则 done() 会导致本地事件循环完成,并且 exec() 返回 r。

与 QWidget::close() 一样,如果设置了 Qt::WA_DeleteOnClose 标志,则 done() 会删除对话框。
如果对话框是应用程序的主要小部件,则应用程序终止。
如果对话框是最后一个关闭的窗口,则发出 QApplication::lastWindowClosed() 信号。


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

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

4、setResult(int i)

void QDialog::setResult(int i)

将模态对话框的结果代码设置为 i。


5. showEvent()

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

此事件处理程序可以在子类中重新实现,以接收在事件参数中传递的小部件显示事件。

非自发的显示事件在显示之前立即发送到小部件。

窗口的自发展示事件随后交付。

注意:当窗口系统更改其映射状态时,小部件会收到自发的显示和隐藏事件,例如 用户最小化窗口时的自发隐藏事件,以及再次恢复窗口时的自发显示事件。

在收到一个自发的隐藏事件后,在 isVisible() 的意义上,一个小部件仍然被认为是可见的。
  • 9
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt中,当用户单击窗口关闭按钮(叉按钮)时,窗口会被关闭并且窗口的应用程序会退出。如果您想要将窗口最小化到系统托盘而不是退出应用程序,您可以重写QWidget的closeEvent()函数来实现这个功能。 以下是一个示例: ```python from PyQt5.QtWidgets import QApplication, QWidget, QSystemTrayIcon, QMenu, QAction from PyQt5.QtGui import QIcon class MyWidget(QWidget): def __init__(self, parent=None): super().__init__(parent) self.tray_icon = QSystemTrayIcon(self) self.tray_icon.setIcon(QIcon('icon.png')) self.tray_icon.setVisible(True) self.tray_menu = QMenu(self) self.show_action = QAction('Show', self) self.quit_action = QAction('Quit', self) self.tray_menu.addAction(self.show_action) self.tray_menu.addAction(self.quit_action) self.tray_icon.setContextMenu(self.tray_menu) self.show_action.triggered.connect(self.showNormal) self.quit_action.triggered.connect(self.quit) def closeEvent(self, event): event.ignore() self.hide() def quit(self): self.tray_icon.setVisible(False) QApplication.quit() if __name__ == '__main__': app = QApplication([]) widget = MyWidget() widget.show() app.exec_() ``` 在此示例中,我们创建了一个包含系统托盘图标的小部件,当用户单击关闭按钮时,我们将忽略关闭事件并将窗口隐藏到系统托盘。我们还在系统托盘中添加了一个菜单,其中“Show”行动会显示窗口,而“Quit”行动会退出应用程序并在系统托盘中删除托盘图标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值