Russian Qt Forum
Сентябрь 30, 2024, 20:16 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: РЕШЕНО MAC OS X: После вызова showFullScreen() пропадает иконка в трее  (Прочитано 4568 раз)
ninjaproger
Гость
« : Май 12, 2010, 14:16 »

Всем добрый день!

Столкнулся с проблемой:

Система Mac OS X Snow Leopard

В программе окно (QWidget с флагом Qt::Window) все время спрятано (hide()) при нажатии на иконку программы в трее
обрабатывается сигнал иконки - activated и вызывается функция showFullScreen()
окно раскрывается в полный экран, но иконка в трее перестает отображаться,
хотя если по тому месту где она находилась кликнуть, то она либо появляется,
либо просто генерит сигнал activated(). Если вызывать showFullScreen() из меню программы,
все отрабатывает нормально и иконка не исчезает.

В чем может быть проблема?
« Последнее редактирование: Май 13, 2010, 12:23 от ninjaproger » Записан
Wicked_Digger
Гость
« Ответ #1 : Май 13, 2010, 10:59 »

Попробуй развязать через singleShot, часто помогает при подобных проблемах.
Записан
ninjaproger
Гость
« Ответ #2 : Май 13, 2010, 12:22 »

Проблема решена:
в обработчике трэй-иконки activated() вместо непосредственного запуска showFullScreen()
запускается QTimer::singleShot(150,this,SLOT(grabScreen()));

в grabScreen() вызывается функция showFullScreen() и все отрабатывает нормально.

Огромное спасибо за помощь!
Записан
Wicked_Digger
Гость
« Ответ #3 : Май 13, 2010, 15:22 »

150 зря поставил, будет зависимость от мощности машины и загрузки проца.
Или 0 для развязки по стеку (стандартный петерн в Qt), или надо искать другое решение, т.е. событие, после которого операция уже отрабатывает корректно.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #4 : Май 13, 2010, 17:04 »

Можно попробовать так:

Код
C++ (Qt)
QMetaObject::invokeMethod(this, "showFullScreen", Qt::QueuedConnection);
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
ninjaproger
Гость
« Ответ #5 : Май 13, 2010, 17:32 »

150 зря поставил, будет зависимость от мощности машины и загрузки проца.
Или 0 для развязки по стеку (стандартный петерн в Qt), или надо искать другое решение, т.е. событие, после которого операция уже отрабатывает корректно.

150 подобрано опытным путем, если меньше 150 то не прокатывает.
Тестилось под WMWare так что я думаю даже с самым слабым процем должно работать,
но если есть более корректные варианты хотелось бы их попробовать.
« Последнее редактирование: Май 13, 2010, 17:41 от ninjaproger » Записан
ninjaproger
Гость
« Ответ #6 : Май 13, 2010, 17:39 »

Можно попробовать так:

Код
C++ (Qt)
QMetaObject::invokeMethod(this, "showFullScreen", Qt::QueuedConnection);

К сожалению не помогло.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.147 секунд. Запросов: 23.