Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Перехват сигнала о закрытии вспомогательного окна в основном приложении Qt [RSS Feed]

#1 Сен. 10, 2012 16:51:10

Vad
От:
Зарегистрирован: 2008-08-28
Сообщения: 94
Репутация: +  0  -
Профиль   Отправить e-mail  

Перехват сигнала о закрытии вспомогательного окна в основном приложении Qt

Есть главное окно из него создаю другое окно (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(“Закрыть консольное окно”))

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



Офлайн

#2 Сен. 10, 2012 17:44:50

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Перехват сигнала о закрытии вспомогательного окна в основном приложении Qt

Нет такого сигнала. Нужно переопределить 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)

Офлайн

#3 Сен. 10, 2012 22:54:28

Vad
От:
Зарегистрирован: 2008-08-28
Сообщения: 94
Репутация: +  0  -
Профиль   Отправить e-mail  

Перехват сигнала о закрытии вспомогательного окна в основном приложении Qt

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), вроде смотрел по примерам переопределение сигнала не требует что либо возвращать….



Отредактировано Vad (Сен. 11, 2012 08:49:15)

Офлайн

#4 Сен. 11, 2012 17:16:55

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Перехват сигнала о закрытии вспомогательного окна в основном приложении Qt

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


Офлайн

#5 Сен. 12, 2012 09:02:01

Vad
От:
Зарегистрирован: 2008-08-28
Сообщения: 94
Репутация: +  0  -
Профиль   Отправить e-mail  

Перехват сигнала о закрытии вспомогательного окна в основном приложении Qt

reclosedev
event.accept()
Работает без этого вызова и позволяет закрыть окно.
Я только недавно осваиваю Qt, но возможно это из за того что класс консольного окна создаю отдельно не как дочерний к главному окну. А потом просто по кнопке делаю self.ConsolObj.show() и self.ConsolObj.close() и все сигналы в консольном окне доступны через объект self.ConsolObj, только надо было переопределить сигнал закрытия окна.



Офлайн

  • Начало
  • » GUI
  • » Перехват сигнала о закрытии вспомогательного окна в основном приложении Qt[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version