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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Qt 4.2.3] Переключение фокуса  (Прочитано 5465 раз)
Разуев Максим
Гость
« : Июнь 07, 2007, 15:28 »

Я вызываю внешную программу через QProcess. Программа запускается но фокус остается у моей проги, как сделать чтобы фокус переключался на вызываемую программу.
Записан
Steven_Orko
Гость
« Ответ #1 : Июнь 07, 2007, 15:34 »

Насколько я понимаю, то это вопросу к менеджеру окон... Именно в его настройках обычно прописано, как передавать фокус между окном одного приложения и вновь запущенного...
Записан
Sergeich
Гость
« Ответ #2 : Июнь 07, 2007, 15:44 »

Если речь идет о виндах, то поток вызвавщий другое приложение должен явно указать, что не против переключения фокуса ввода. Я решал эту проблему так:
Код:
#ifdef Q_WS_WIN
#define _WIN32_WINNT 0x0500
#include <windows.h>
#endif

void disablePopupLock()
{
#ifdef Q_WS_WIN
AllowSetForegroundWindow( ASFW_ANY );
#endif
}
Записан
Разуев Максим
Гость
« Ответ #3 : Июнь 07, 2007, 16:00 »

То есть средствами Qt это невозможно.
Записан
Sergeich
Гость
« Ответ #4 : Июнь 07, 2007, 16:19 »

Курим доку:
Цитировать
void QWidget::activateWindow ()

Sets the top-level widget containing this widget to be the active window.

An active window is a visible top-level window that has the keyboard input focus.

This function performs the same operation as clicking the mouse on the title bar of a top-level window. On X11, the result depends on the Window Manager. If you want to ensure that the window is stacked on top as well you should also call raise(). Note that the window must be visible, otherwise activateWindow() has no effect.

On Windows, if you are calling this when the application is not currently the active one then it will not make it the active window. It will change the color of the taskbar entry to indicate that the window has changed in some way. This is because Microsoft do not allow an application to interrupt what the user is currently doing in another application.
Записан
goer
Гость
« Ответ #5 : Июнь 07, 2007, 16:23 »

Sergeich, сеньк. А то меня тостеры заели уже с окном которое не хочет быть наверху после закрытия диалога. :-)
Записан
Разуев Максим
Гость
« Ответ #6 : Июнь 07, 2007, 17:59 »

Причем тут это. Я же спрашивал о переключении фокуса внешней программы.
Записан
dread
Гость
« Ответ #7 : Июнь 08, 2007, 02:51 »

Может я чего не догоняю, но у меня подобной проблемы не возникло...
при вызове через QProcess приложение всегда становиться Top-level...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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