![]() |
|
![]() ![]() ![]() |
|
rainbow86 |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 27.10.2005 Репутация: нет Всего: нет |
Никак не получается переопределить minimize. Я хочу что б вместо обычного сворачивания приложение сворачивалось в трэй!
Вот код:
Функция slotMinimizeToTray()
Несмотря на то что возвращается true после slotMinimizeToTray() все равно вызывается стандартный обработчик??? |
||||
|
|||||
nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 13 Всего: 181 |
rainbow86, попробуй добавить
-------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
rainbow86 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 27.10.2005 Репутация: нет Всего: нет |
не помогает ![]() |
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
А здесь ты смотрел ? examples\desktop\systray\
|
|||
|
||||
rainbow86 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 27.10.2005 Репутация: нет Всего: нет |
Там нету переопределения minimize!!!
|
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Мне кажется это невозможно. И для чего его переопределять, если делается то что нужно - окно исчезает и в трее появляется иконка ? |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 7 Всего: 162 |
rainbow86, что говорит отладчик? до твоего куска кода (фильтра и вызова твоего сворачивания в трей) управление доходит?
|
|||
|
||||
rainbow86 |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 27.10.2005 Репутация: нет Всего: нет |
В том то и дело что окно не исчезает,а сворачивается. Оно исчезает только по закрытию и остается висеть в трее.
Код отрабатывает появляется значок в трее, окно исчезает, но потом срабатывает стандартный обработчики окно появляется в свернутом виде. Причем если его развернуть то видна только рамка, т.е. внутри окно пустое!!! Это сообщение отредактировал(а) rainbow86 - 9.1.2008, 12:13 |
||||
|
|||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 7 Всего: 162 |
||||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Попробуй вместо hide() пропиши:
Или используй WinApi http://www.qtcentre.org/forum/showthread.php?t=23 Это сообщение отредактировал(а) SABROG - 9.1.2008, 13:06 |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 7 Всего: 162 |
это очень плохой выход. Кроссплатформенность летит к чёрту. Это сообщение отредактировал(а) JackYF - 9.1.2008, 13:12 |
|||
|
||||
SABROG |
|
||||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Ну это на тот случай, если человек сдастся и решит под разными осями делать разную реализацию. Тогда включит в блок свой код и проблема исчезнет:
Это сообщение отредактировал(а) SABROG - 9.1.2008, 13:32 |
||||
|
|||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 7 Всего: 162 |
не исчезнет, смотри его последнее сообщение. Проблема в том, что происходит лишнее, а не "не происходит то, что хочу". |
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Исчезнет если использовать 2 реализации перехвата сообщений, одна - WinApi, другая - стандартный метод Qt.
|
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 7 Всего: 162 |
||||
|
||||
rainbow86 |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 27.10.2005 Репутация: нет Всего: нет |
Нашел сначала рабочий пример по ссылке http://www.qtcentre.org/forum/showthread.php?t=23
с помощью переопределения функции
Но так как это не кроссплатформенно решил поискать еще и наткнулся на том же сайте вот на такое решение проблемы предложенное самими тролями:
Вот ссылка кому интересно на обсуждение http://www.qtcentre.org/forum/f-newbie-4/t...imize-8826.html И кроссплатформенно и работает ![]() |
||||
|
|||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 7 Всего: 162 |
Что ж, отличный опыт ).
Добавлено через 5 минут и 23 секунды только у меня ссылка на обсуждение не открывается? |
|||
|
||||
SABROG |
|
||||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Грубо говоря, здесь создается еще один, временный поток - thread. Который обеспечивает сокрытие окна вне обработчика событий, т.к. скорее всего, сам метод hide() является генератором события и блокируется.
Я бы не назвал изящным решением - создание дополнительного потока для таких целей, хоть это и выглядит красиво, но похоже выбор не велик. Кстати попробуй создать свой сигнал и слот под него, вызывай его таким образом из обработчика эвентов:
А внутри слота под этот сигнал впиши hide(). По идее сигнал hide_me_please должен будет вызываться сразу же после выхода из процедуры обработчика эвентов. Это сообщение отредактировал(а) SABROG - 9.1.2008, 22:37 |
||||
|
|||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
SABROG, это не выглядит красиво. Это лишний раз заставляет задуматься, а зачем тут такое безобразие. Поэтому придется еще писать комментарий, который будет объяснять, почему сделано так, а не иначе...
|
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Я ошибся QTimer::singleShot не создает нить, в исходниках Qt на нулевой таймер спец. оптимизация стоит, к тому же программа состоит из двух нитей обычно и в одной из них успешно работают таймеры, пока в другой идет блокирующая функция. Поэтому все что делает singleShot это вызывает PostEvent, который добавляется в очередь сообщений и обрабатывается уже после выхода из фильтра эвентов на следующем цикле.
Это сообщение отредактировал(а) SABROG - 10.1.2008, 20:19 |
|||
|
||||
SABROG |
|
||||||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Я все-таки нашел нормальный способ это сделать, спасибо Владимиру Пузанову из ньюс группы.
Т.е. добавилась фишка Qt::QueuedConnection. Проверил, это работает. Соответственно в эвенте:
Т.е. я создал свой сигнал и свой слот, законнектил их к друг другу. А флаг позволил сделать отложенную передачу сигнала по возврату в main loop. ![]() Это сообщение отредактировал(а) SABROG - 11.1.2008, 11:22 |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |