Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Закрытие окна крестиком или методом close 
:(
    Опции темы
Brodyaga
Дата 8.6.2010, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 599
Регистрация: 19.1.2008

Репутация: нет
Всего: 2



Всем доброго времени суток!

Как мне отличить как было закрыто окно, по нажатию на X или вызовом метода close?

Если по нажатию на X, то вызывается событие closeEvent, где я делаю необходимые мне действия.
Если я вызываю метод close, так же вызывается событие closeEvent и делаются теже действия, хотя их нужно выполнять ТОЛЬКО при нажатии на X.
Как мне определить каким образом происходит закрытие формы, чтобы знать, выполнять необходимые мне действия или нет?
Может быть можно както перехватить нажатие именно на X ?
Или как мне закрыть окно, чтобы не вызывался метод closeEvent?

P.S.
Вариант с флагом не предлагать
PM MAIL   Вверх
borisbn
Дата 9.6.2010, 06:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Переопредели в своём классе функцию close, в которой взводи флажок и вызывай QWidget::close(), а в closeEvent() проверяй, если флажок взведён, то делай одни действия, иначе - другие. Не забудь там же флажок опустить


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Helmet
Дата 9.6.2010, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 27.2.2009
Где: Someone's hea d

Репутация: нет
Всего: 1



Код

bool    QEvent::spontaneous () const

PM   Вверх
Brodyaga
Дата 9.6.2010, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 599
Регистрация: 19.1.2008

Репутация: нет
Всего: 2



Цитата

Переопредели в своём классе функцию close, в которой взводи флажок и вызывай QWidget::close(), а в closeEvent() проверяй, если флажок взведён, то делай одни действия, иначе - другие. Не забудь там же флажок опустить

Спасибо, но я же просил без флага.
Цитата

P.S.
Вариант с флагом не предлагать



Цитата

bool    QEvent::spontaneous () const

И по нажатию на крестик и при вызове метода QWidget::close() - QCloseEvent::spontaneous() возвращает false :(
PM MAIL   Вверх
Helmet
Дата 9.6.2010, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 27.2.2009
Где: Someone's hea d

Репутация: нет
Всего: 1



Цитата(Brodyaga @  9.6.2010,  17:38 Найти цитируемый пост)
И по нажатию на крестик и при вызове метода QWidget::close() - QCloseEvent::spontaneous() возвращает false :( 

Странно. У меня (Windows XP) как раз по крестику - спонтениус, по close() - нет.
Да и дока говорит, что так должно быть
Цитата

bool QEvent::spontaneous () const

Returns true if the event originated outside the application (a system event); otherwise returns false.
The return value of this function is not defined for paint events.

PM   Вверх
Brodyaga
Дата 10.6.2010, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 599
Регистрация: 19.1.2008

Репутация: нет
Всего: 2



Цитата

Странно. У меня (Windows XP) как раз по крестику - спонтениус, по close() - нет.
Да и дока говорит, что так должно быть

Сейчас проверил... в обычной форме эта функция работает, но я использую её в перехватчике события closeEvent на MDI-форме. Там она почемуто не срабатывает :(
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0968 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.