Найти - Пользователи
Полная версия: Перехват сигнала о закрытии вспомогательного окна в основном приложении Qt
Начало » GUI » Перехват сигнала о закрытии вспомогательного окна в основном приложении Qt
1
Vad
Есть главное окно из него создаю другое окно (MainWindow).
Требуется при закрытии вспомогательного окна (на крестик в углу)отлавливать факт закрытия в главном окне.
Класс вспомогательного окна создаю так:
#консольное окно
class Consol(QtGui.QMainWindow,Ui_Con_window):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.setupUi(self)

вот так создаю объект в главном приложении
главное окно
class MWindow(QtGui.QMainWindow,Ui_MainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.setupUi(self)
#создаем консоль
self.ConsolObj = Consol()

вот так хотел отлавливать сигнал:
QtCore.QObject.connect(self.ConsolObj, QtCore.SIGNAL(“destroyed()”), self.closeCON)#
……..
def closeCON(self):
self.pushButton_19.setText(_fromUtf8(“Закрыть консольное окно”))

такой вариант не работает….закрываю консольное окно по крестику в углу…хочу отловить факт закрытия в основном приложении….как это можно сделать?
reclosedev
Нет такого сигнала. Нужно переопределить closeEvent и в нем эмитить сигнал.

class Consol(QtGui.QMainWindow,Ui_Con_window):
    windowClose = QtCore.pyqtSignal()
    ...
    def closeEvent(self, event):
        self.windowClose.emit()
        return super(Consol, self).closeEvent(event)
...
self.consoleObj.windowClose.connect(self.do_something_on_child_window_close)
Vad
reclosedev
Нет такого сигнала. Нужно переопределить closeEvent и в нем эмитить сигнал.

class Consol(QtGui.QMainWindow,Ui_Con_window):
    windowClose = QtCore.pyqtSignal()
    ...
    def closeEvent(self, event):
        self.windowClose.emit()
        return super(Consol, self).closeEvent(event)
...
self.consoleObj.windowClose.connect(self.do_something_on_child_window_close)

Переопределение сигнала понятно.
А что мы делаем этим вызовом: return super(Consol, self).closeEvent(event)
В принципе проверил, работает и без return super(Consol, self).closeEvent(event), вроде смотрел по примерам переопределение сигнала не требует что либо возвращать….
reclosedev
Vad
А что мы делаем этим вызовом: return super(Consol, self).closeEvent(event)
Вызываем имплементацию метода базового класса, которая по умолчанию просто принимает это событие, позволяя закрыть окно. Т.е. можно было написать event.accept().


Vad
reclosedev
event.accept()
Работает без этого вызова и позволяет закрыть окно.
Я только недавно осваиваю Qt, но возможно это из за того что класс консольного окна создаю отдельно не как дочерний к главному окну. А потом просто по кнопке делаю self.ConsolObj.show() и self.ConsolObj.close() и все сигналы в консольном окне доступны через объект self.ConsolObj, только надо было переопределить сигнал закрытия окна.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB