Название: QSystemTrayIcon->geometry врет координаты Отправлено: kazenniy от Апрель 05, 2012, 14:32 Помогите решить проблему.
Пытаюсь вывести окно рядом с иконкой в трее, как у регулятора громкости. В конструкторе класса создается QSystemTrayIcon, задаются параметры и выводится иконка. Код: m_ptrayIcon = new QSystemTrayIcon(this); В классе определен публичный метод Код: QRect QEcho::getTrayIconGeometry() В main.cpp Код: QEcho w; Название: Re: QSystemTrayIcon->geometry врет координаты Отправлено: Bepec от Апрель 05, 2012, 14:34 Да не врёт он. Недавно сам пробовал наведение на иконку тестировать.
Видимо ты что-то не так делаешь. update: Сразу говорю - твоих "огрызков кода" нехватит для помощи тебе ;) Название: Re: QSystemTrayIcon->geometry врет координаты Отправлено: kazenniy от Апрель 05, 2012, 14:37 Я понимаю, что не так. Нужно разобраться, что именно не так.
Что нужно кроме "огрызков кода", чтобы разобраться в проблеме? Может у кого нибудь есть рабочий пример использования QSystemTrayIcon->geometry? Название: Re: QSystemTrayIcon->geometry врет координаты Отправлено: Bepec от Апрель 05, 2012, 14:42 Выложи минимально компилируемый проект с твоей проблемой. В архиве. В сообщении. И будет тебе счастье.
Название: Re: QSystemTrayIcon->geometry врет координаты Отправлено: kazenniy от Апрель 05, 2012, 14:50 Спасибо за совет. Прилагаю архив проекта.
Название: Re: QSystemTrayIcon->geometry врет координаты Отправлено: Bepec от Апрель 05, 2012, 15:05 Всё открывается. Всё работает. Плохо конечно, что запоминает положение только один раз при открытии программы. ну да и не учитывает границу экрана.
А так всё ок. PS красными стрелочками отмечено твоё окошечко. Название: Re: QSystemTrayIcon->geometry врет координаты Отправлено: LisandreL от Апрель 05, 2012, 15:10 В slotShowHide читайте и устанавливайте положение.
Название: Re: QSystemTrayIcon->geometry врет координаты Отправлено: Bepec от Апрель 05, 2012, 15:12 Lisandrel, а тему почитать, не?
Название: Re: QSystemTrayIcon->geometry врет координаты Отправлено: LisandreL от Апрель 05, 2012, 15:44 Bepec, я читал и даже приложенный пример компилировал, а что вас смутило в моём совете?
Название: Re: QSystemTrayIcon->geometry врет координаты Отправлено: Bepec от Апрель 05, 2012, 15:46 Что к теме он не относится совершенно :/
Название: Re: QSystemTrayIcon->geometry врет координаты Отправлено: kazenniy от Апрель 05, 2012, 15:47 Всё открывается. Всё работает. Плохо конечно, что запоминает положение только один раз при открытии программы. ну да и не учитывает границу экрана. Странно. У меня на линуксе окошко всегда в левом верхнем углу появляется. С чем это может быть связано нет идей?А так всё ок. PS красными стрелочками отмечено твоё окошечко. Название: Re: QSystemTrayIcon->geometry врет координаты Отправлено: kazenniy от Апрель 05, 2012, 15:51 В slotShowHide читайте и устанавливайте положение. Попробовал, ничего не изменилось.Название: Re: QSystemTrayIcon->geometry врет координаты Отправлено: LisandreL от Апрель 05, 2012, 15:59 Что к теме он не относится совершенно :/ :oЯ код Код: rect = w.getTrayIconGeometry(); kazenniy, тогда смотрите, что вам возвращает m_ptrayIcon->geometry(). Не исключено, что в Linux'е она возвращает неверное значение, например правильные размеры, но координаты всегда нулевые. Название: Re: QSystemTrayIcon->geometry врет координаты Отправлено: kazenniy от Апрель 05, 2012, 16:22 Размеры правильные отдает, координаты нет.
Нет идей почему так происходит? Название: Re: QSystemTrayIcon->geometry врет координаты Отправлено: kazenniy от Апрель 05, 2012, 16:56 Все чудесатее и чудесатее.
Если запустить в режиме отладки с контрольной точкой на получении геометрии, то она получается правильно и окошко где нужно рисуется. Ничего не понимаю =( Название: Re: QSystemTrayIcon->geometry врет координаты Отправлено: Bepec от Апрель 05, 2012, 17:47 Попробуй выводить в дебаг консоль каждый раз при изменении геометрии.
Название: Re: QSystemTrayIcon->geometry врет координаты Отправлено: _OLEGator_ от Апрель 05, 2012, 20:38 у меня в 7 винде нормально позиционируется.
Про линукс могу предположить, что пока не отработает show, в QSystemTrayIcon еще не установлены правильные координаты geometry, надо во время работы смотреть, что возвращает geometry. Название: Re: QSystemTrayIcon->geometry врет координаты Отправлено: Alex Custov от Апрель 05, 2012, 20:55 скорее всего что иконка не успевает встроится в трей, т.к. это происходит асинхронно. Для тестирования создай иконку в трее, и по таймеру через 2 секунды прочитай геометрию и выведи её на консоль.
Название: Re: QSystemTrayIcon->geometry врет координаты Отправлено: kazenniy от Апрель 06, 2012, 09:15 С таймерами еще не знаком, с QT познакомился неделю назад всего. Буду разбираться.
Название: Re: QSystemTrayIcon->geometry врет координаты Отправлено: kazenniy от Апрель 06, 2012, 11:22 Похоже действительно не успевает иконку вставить. Поставил задержку 1 сек. перед запросом geometry и все заработало. При этом задержки в 0.5 сек. не хватает.
Занятная разница между платформами получается. =) Осталось разобраться как по человечески определить готовность иконки, с задержкой делать некузяво. Название: Re: QSystemTrayIcon->geometry врет координаты Отправлено: LisandreL от Апрель 06, 2012, 13:59 Похоже действительно не успевает иконку вставить. Поставил задержку 1 сек. перед запросом geometry и все заработало. При этом задержки в 0.5 сек. не хватает. Так вы запрашивайте, как я предлагал, не при создании иконки, а перед показом окна, для которого вы вычисляете положение (к этому месту иконка уже должна быть на своём месте).Занятная разница между платформами получается. =) Осталось разобраться как по человечески определить готовность иконки, с задержкой делать некузяво. Всё равно заранее вычислять 1 раз вычислять геометрию не дело. Иконка могла подвинуться другими иконками, панель могли в другую часть экрана перетащить, да разрешение поменять в конце концов. Название: Re: QSystemTrayIcon->geometry врет координаты Отправлено: kazenniy от Апрель 06, 2012, 19:40 Вроде тогда это не помогло. Хотя тогда у меня не было понимания причины, теперь оно вроде есть. Буду пробовать снова.
Спасибо. Название: Re: QSystemTrayIcon->geometry врет координаты Отправлено: kazenniy от Апрель 07, 2012, 09:19 Как ни странно, в этот раз все получилось. К моменту вызова slotShowHide иконка уже готова и окошко рисуется как нужно. Всем спасибо за участие!
А может ктонить подскажет, как получить информацию о размере и местоположении трея? А то не понятно в какую сторону окошко рисовать. Название: Re: QSystemTrayIcon->geometry врет координаты Отправлено: Bepec от Апрель 07, 2012, 13:27 QDesktop* позволяет получить размеры экрана, в которые(windows) не включена панель задач.
pos позволяет получить размеры иконки и её положение. Проводим несложные вычисления + размер окна + в какую сторону открываться и вуаля. Название: Re: QSystemTrayIcon->geometry врет координаты Отправлено: LisandreL от Апрель 07, 2012, 15:48 QDesktopWidget
Только не забудьте, что мониторов может быть и несколько. |