我要实现的目标:如果用户在QMainWindow之外单击,则窗口应该隐藏。
我如何解决此问题:找到一种方法来确定QMainWindow是否失去焦点,如果这样,请使用后续功能隐藏窗口。
不幸的是,我无法完全掌握如何实现这一目标。
可以使用Qt :: Popup标志完成此操作,但是我无法为QMainWindow包含的小部件提供任何键盘输入。
答案 0 :(得分:2)
void QApplication :: focusChanged(QWidget * old,QWidget * now)
当具有键盘焦点的窗口小部件从旧更改为现在时,即由于用户按下Tab键,单击窗口小部件或更改了活动窗口,则发出此信号。旧的和现在的都可以作为空指针。
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class MyWin(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.setFocus()
QtWidgets.qApp.focusChanged.connect(self.on_focusChanged)
@QtCore.pyqtSlot("QWidget*", "QWidget*")
def on_focusChanged(self, old, now):
if now == None:
print(f"\nwindow is the active window: {self.isActiveWindow()}")
# window lost focus
# do what you want
self.setWindowState(QtCore.Qt.WindowMinimized)
else: print(f"window is the active window: {self.isActiveWindow()}")
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = MyWin()
MainWindow.show()
sys.exit(app.exec_())