Название: Как вывести окно на передний план после загрузки приложения. Отправлено: spectre71 от Июнь 26, 2009, 10:55 При загрузке приложения у меня выводиться "Splash" со статусом загрузки, после этого "Splash" пропадает и показывается главное окно.
Если во время загрузки пользователь ткнул в какое-либо окно другого приложения, то мое главное окно не выходит на передний план. Как сделать так, чтобы оно вышло на передний план? Название: Re: Как вывести окно на передний план после загрузки приложения. Отправлено: spectre71 от Июнь 26, 2009, 11:48 Код
Не помогает! Название: Re: Как вывести окно на передний план после загрузки приложения. Отправлено: BaltikS от Июнь 26, 2009, 12:00 Я думаю это дело ОС или оконного менеджера. А средствами qt - думаю никак...
Название: Re: Как вывести окно на передний план после загрузки приложения. Отправлено: Alex Custov от Июнь 26, 2009, 12:47 http://www.prog.org.ru/topic_7365_0.html
Название: Re: Как вывести окно на передний план после загрузки приложения. Отправлено: spectre71 от Июнь 26, 2009, 12:58 http://www.prog.org.ru/topic_7365_0.html Смотрел я эту тему. Но решения проблемы там не нашел.Под Windows точно не работает! Если знаешь решение, напиши. Название: Re: Как вывести окно на передний план после загрузки приложения. Отправлено: Alex Custov от Июнь 26, 2009, 13:08 а, так под виндз :) Там тоже это упомянуто, что это решение только под X11. Под виндз не знаю.
Название: Re: Как вывести окно на передний план после загрузки приложения. Отправлено: spectre71 от Июнь 26, 2009, 13:33 а, так под виндз :) Там тоже это упомянуто, что это решение только под X11. Под виндз не знаю. Там под Windows как раз якобы было решение Похожая фигня у меня сейчас (кути 4.4) - под виндой набор w->show(); w->raise(); w->activateWindow(); // это должно быть обязательно после show() работает, но под КДЕ не хочет. Но это не работает Название: Re: Как вывести окно на передний план после загрузки приложения. Отправлено: BELNETMON от Июнь 26, 2009, 14:18 Под виндой начиная с XP (или даже с 2000й) приложение никаким боком не может на себя забрать фокус. Это продуманное и очень правильное системное поведение. Приложение выбирает пользователь и работает в нем, но переключить на другое его никто не может.
Название: Re: Как вывести окно на передний план после загрузки приложения. Отправлено: ритт от Июнь 26, 2009, 14:20 пздж /* уж извините */
Код: #ifdef Q_OS_WIN Название: Re: Как вывести окно на передний план после загрузки приложения. Отправлено: spectre71 от Июнь 26, 2009, 14:42 пздж /* уж извините */ Код: #ifdef Q_OS_WIN Код
Не помогает! Название: Re: Как вывести окно на передний план после загрузки приложения. Отправлено: SABROG от Июнь 26, 2009, 14:49 пздж /* уж извините */ Из ремарки к функции понятно, что это даже не то что для Qt, а вообще для любой программы не правильное поведение. Код: Starting with Microsoft Windows 98 and Windows 2000, the system restricts which processes can set the foreground window. A process can set the foreground window only if one of the following conditions is true: Из FAQ'a эхи SU.WIN32.PROG: Цитировать 2.05. Когда вызываешь ShowWindow(...,SW_SHOW) из пpоцесса, не являющегося foreground, на таскбаpе начинает мигать таб, соответствующий окошку. Как заставить окно откpываться сpазу? AllowSetForegroundWindow() или посылать ему клик по Caption. :) комментарий: AllowSetForegroundWindow вызывать должен фореграунд процесс, чтобы позволить другим процессам делать свое окно активным. Так что этот метод применим только с использованием хука. Не могу не согласится, что это должно быть на усмотрение пользователя - как опция в программе, но никак не насильно. Я сам на работе часто сталкиваюсь с тем, что пишу кому-нибудь письмо или кликаю куда-нибудь, а всплывает дурацкий NAG скрин какого-нибудь update'a какой-нибудь программы и в итоге я кликаю на рекламный баннер (Avira например) или вообще кнопку другой программы, которую я жать даже не собирался. Название: Re: Как вывести окно на передний план после загрузки приложения. Отправлено: spectre71 от Июнь 26, 2009, 15:51 SABROG, Спасибо за инфу.
AllowSetForegroundWindow в одном случае помогла - при поднятии окна из трея При попытке повторного запуска программы, она отсылает сообщение уже запущенному экземпляру который должен стать Foreground До этого если прога была свернута в трее, она поднималось, но неперемещалась наверх! Название: Re: Как вывести окно на передний план после загрузки приложения. Отправлено: break от Июль 05, 2009, 15:34 Цитировать Не могу не согласится, что это должно быть на усмотрение пользователя - как опция в программе, но никак не насильно. Я сам на работе часто сталкиваюсь с тем, что пишу кому-нибудь письмо или кликаю куда-нибудь, а всплывает дурацкий NAG скрин какого-нибудь update'a какой-нибудь программы и в итоге я кликаю на рекламный баннер (Avira например) или вообще кнопку другой программы, которую я жать даже не собирался. Тоже считаю что программа не должна брать на себя фокус. Особенно бесит когда в Windows запускаешь программу - и идешь бродить в меню - только доходишь до нужного пункта, а вдруг запущенная программа берет на себя фокус закрывая окно меню, и приходиться лезть заново. Временами просто с ума сводит. Я хочу сам тыкать мышкой и чтобы тычилось туда куда я тыкаю а не сами окошки должны передо мной возникать, непойми как. Название: Re: Как вывести окно на передний план после загрузки приложения. Отправлено: ритт от Июль 06, 2009, 03:03 break, если тебя такие мелочи и сразу бесят, попользуй kopete из 4.2.х - вообще психом станешь :)
Название: Re: Как вывести окно на передний план после загрузки приложения. Отправлено: Djinn от Июль 06, 2009, 17:41 При загрузке приложения у меня выводиться "Splash" со статусом загрузки, после этого "Splash" пропадает и показывается главное окно. Если во время загрузки пользователь ткнул в какое-либо окно другого приложения, то мое главное окно не выходит на передний план. Как сделать так, чтобы оно вышло на передний план? Цитировать Выводим окно на передний план: SetWindowPos ( hwndYourWindow, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE ); Возвращаем в обратное состояние: SetWindowPos ( hwndYourWindow, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE ); Вот вариант чисто для Windows. Методами qt наверн никак, раз профессионалы говорят... Название: Re: Как вывести окно на передний план после загрузки приложения. Отправлено: z11t3 от Апрель 21, 2010, 04:53 Под виндой начиная с XP (или даже с 2000й) приложение никаким боком не может на себя забрать фокус. Это продуманное и очень правильное системное поведение. Приложение выбирает пользователь и работает в нем, но переключить на другое его никто не может. Неправда ваша. Провожу модернизацию системы диспетчерского управления (новый билд, старый писан Delphi - благо модулями). Оперативный персонал работает с программой в Full-screen (электрическая схема на весь экран, прочему софту там вообще делать нечего). В общем жаль если действительно средствами QT не вывести запущенное приложение "выше" всех по Z индексу. Попробую с вами пока не согласится и как-то исправить упущение, не используя платформо-зависимого кода. Название: Re: Как вывести окно на передний план после загрузки приложения. Отправлено: SABROG от Апрель 21, 2010, 08:25 Неправда ваша. Провожу модернизацию системы диспетчерского управления (новый билд, старый писан Delphi - благо модулями). Оперативный персонал работает с программой в Full-screen (электрическая схема на весь экран, прочему софту там вообще делать нечего). Оперативный персонал калеки и не могут ткнуть мышкой в нужное окно? В Qt Full-screen не тоже самое, что в играх. Qt не меняет разрешение экрана.Я сам на работе часто сталкиваюсь с проблемой "слишком умных" программ, которые "лезут под мышку", когда я пытаюсь совершить какое-то действие в другой программе. Частенько нажимал туда куда даже не собирался. Можно представить себе последствия подобных нажатий где нибудь в Firefox на запрос установки програмного обеспечения с какого нибудь вредоносного сайта. Название: Re: Как вывести окно на передний план после загрузки приложения. Отправлено: lit-uriy от Апрель 21, 2010, 11:12 >>не могут ткнуть мышкой в нужное окно?
её у них может вообще не быть если это имитация диспетчерского щита, равно как и клавиатуры Название: Re: Как вывести окно на передний план после загрузки приложения. Отправлено: break от Апрель 21, 2010, 22:24 Под виндой начиная с XP (или даже с 2000й) приложение никаким боком не может на себя забрать фокус. Это продуманное и очень правильное системное поведение. Приложение выбирает пользователь и работает в нем, но переключить на другое его никто не может. Неправда ваша. Провожу модернизацию системы диспетчерского управления (новый билд, старый писан Delphi - благо модулями). Оперативный персонал работает с программой в Full-screen (электрическая схема на весь экран, прочему софту там вообще делать нечего). В общем жаль если действительно средствами QT не вывести запущенное приложение "выше" всех по Z индексу. Попробую с вами пока не согласится и как-то исправить упущение, не используя платформо-зависимого кода. Не пойму а в чем неправда? Персонал работает с развернутым на весь экран окном - вероятнее всего это программа как то автозапуском запускается при старте компа, но по сути ее выбрал сам человек - система не должна давать возможность брать на себя фокус другим окошкам, от других программ. Обычно при такой ситуации окно мигает в "статус баре" (когда оно рыпнулось вылезти на первый план - но система не дала). Мне приходилось что-то подобное настраивать - обошелся showFullscreen(); для Qt-шных виджетов и тонкой настройкой целевой системы - убиранием всяких программ которые потенциально могли бы даже пытаться вылезти на первый план. Получился такой настроенный образ системы - который меняется редко, сначала заливается он на чистую машину - потом софт - что-то типа вашей электрической схемы. Еще можно писать всякие супер хако-программки - периодически сворачивающие другие окна кроме требуемого, или воспользоваться готовым решением - например в KDE 3 можно было для окошек с конкретным классом задать такие параметры, как находиться на самом верхнем уровне и т.д. Но все это естественно уже не через Qt а через API конкретной системы... Название: Re: Как вывести окно на передний план после загрузки приложения. Отправлено: SABROG от Апрель 22, 2010, 01:20 >>не могут ткнуть мышкой в нужное окно? Для этих целей достаточно флага Qt::WindowStaysOnTopHint.её у них может вообще не быть если это имитация диспетчерского щита, равно как и клавиатуры |