Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: ninjaproger от Май 12, 2010, 14:16



Название: РЕШЕНО MAC OS X: После вызова showFullScreen() пропадает иконка в трее
Отправлено: ninjaproger от Май 12, 2010, 14:16
Всем добрый день!

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

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

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

В чем может быть проблема?


Название: Re: MAC OS X: После вызова showFullScreen() пропадает иконка в трее
Отправлено: Wicked_Digger от Май 13, 2010, 10:59
Попробуй развязать через singleShot, часто помогает при подобных проблемах.


Название: Re: MAC OS X: После вызова showFullScreen() пропадает иконка в трее
Отправлено: ninjaproger от Май 13, 2010, 12:22
Проблема решена:
в обработчике трэй-иконки activated() вместо непосредственного запуска showFullScreen()
запускается QTimer::singleShot(150,this,SLOT(grabScreen()));

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

Огромное спасибо за помощь!


Название: Re: РЕШЕНО MAC OS X: После вызова showFullScreen() пропадает иконка в трее
Отправлено: Wicked_Digger от Май 13, 2010, 15:22
150 зря поставил, будет зависимость от мощности машины и загрузки проца.
Или 0 для развязки по стеку (стандартный петерн в Qt), или надо искать другое решение, т.е. событие, после которого операция уже отрабатывает корректно.


Название: Re: РЕШЕНО MAC OS X: После вызова showFullScreen() пропадает иконка в трее
Отправлено: pastor от Май 13, 2010, 17:04
Можно попробовать так:

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


Название: Re: РЕШЕНО MAC OS X: После вызова showFullScreen() пропадает иконка в трее
Отправлено: ninjaproger от Май 13, 2010, 17:32
150 зря поставил, будет зависимость от мощности машины и загрузки проца.
Или 0 для развязки по стеку (стандартный петерн в Qt), или надо искать другое решение, т.е. событие, после которого операция уже отрабатывает корректно.

150 подобрано опытным путем, если меньше 150 то не прокатывает.
Тестилось под WMWare так что я думаю даже с самым слабым процем должно работать,
но если есть более корректные варианты хотелось бы их попробовать.


Название: Re: РЕШЕНО MAC OS X: После вызова showFullScreen() пропадает иконка в трее
Отправлено: ninjaproger от Май 13, 2010, 17:39
Можно попробовать так:

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

К сожалению не помогло.