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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Получение фокуса приложения в маке[РЕШЕНО]  (Прочитано 8211 раз)
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« : Март 14, 2012, 17:10 »

Есть приложение, работает в трее по хоткею открывает окно на фуллскринн, но что самое интересное фокус остается на предыдущем приложении, у окна которое на фулскрин открывается пробовал и Qt::WindowStaysOnTopHint ставить, все равно, фокус на предыдущем, может есть какие то нюансы ?
« Последнее редактирование: Апрель 18, 2012, 16:23 от ecspertiza » Записан
Bepec
Гость
« Ответ #1 : Март 15, 2012, 07:05 »

На предыдущем - в смысле левом окне?
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #2 : Март 15, 2012, 09:19 »

Если имеется ввиду где остается фокус, то на предыдущем приложении, то есть если работаем в браузере и открываем приложение, фокус остается на браузере, если работаем в фидлере и запускаем приложение ,то фокус так и остается в фидлере.
Записан
Bepec
Гость
« Ответ #3 : Март 15, 2012, 09:21 »

Где то была темка про фокус в MACе.
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #4 : Апрель 18, 2012, 11:58 »

Ну что никто не сталкивался ? А то совсем кисло с этим багом. Всякие setActiveWindow() тоже не помогают.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #5 : Апрель 18, 2012, 13:28 »

попробуй устанавливать фокус через какой-нить родной метод NSView
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Апрель 18, 2012, 13:47 »

Попробуйте по-старинке

Код
C++ (Qt)
ProcessSerialNumber psn;
OSErr err;
 
err = ::GetCurrentProcess(&psn);
if (err == noErr)
::SetFrontProcess(&psn);
 
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #7 : Апрель 18, 2012, 15:19 »

Код:
ProcessSerialNumber	psn;
OSErr err;
 
err = ::GetCurrentProcess(&psn);
if (err == noErr)
::SetFrontProcess(&psn);

не работает, скорее всего потому что сборка Qt Cocoa , а NSView еще не пробовал, насколько понял нужно будет мост писать ?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Апрель 18, 2012, 16:01 »

Код:
ProcessSerialNumber	psn;
OSErr err;
 
err = ::GetCurrentProcess(&psn);
if (err == noErr)
::SetFrontProcess(&psn);

не работает, скорее всего потому что сборка Qt Cocoa , а NSView еще не пробовал, насколько понял нужно будет мост писать ?
SetFrontProcess тоже возвращает код ошибки - есть смысл его посмотреть. Также через ::GetFrontProcess можно получить текущий фокус и сравнить со своим процессом (используя ::SameProcess).

Др. словами есть смысл потратить 10-15 мин чтобы "осмотреться" и понять где проблема - перед тем как городить огород
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #9 : Апрель 18, 2012, 16:08 »

Др. словами есть смысл потратить 10-15 мин чтобы "осмотреться" и понять где проблема - перед тем как городить огород

Тоже верно, ошибка возвращается вот тут

Код:
err = ::GetCurrentProcess(&psn);

так как в мак апи не силен, то пошел гуглить, и нашел что , что бы получить описание ошибки нужно OSErr преобразовать к NSError и там получать описание, но это опять же огород получиться. Я про то что для NSError тоже нужно будет прослойку писать Улыбающийся
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #10 : Апрель 18, 2012, 16:17 »

Код:
ProcessSerialNumber	psn;
OSErr err;
 
err = ::GetCurrentProcess(&psn);
if (err == noErr)
::SetFrontProcess(&psn);

Заработало Улыбающийся Igors, спасибо что остановил меня Улыбающийся Я немного осмотрелся и нашел где косяк был. И за подсказку с кодом тоже спасибо Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Апрель 18, 2012, 16:23 »

так как в мак апи не силен, то пошел гуглить, и нашел что , что бы получить описание ошибки нужно OSErr преобразовать к NSError и там получать описание, но это опять же огород получиться. Я про то что для NSError тоже нужно будет прослойку писать Улыбающийся
http://docs.activestate.com/activeperl/5.14/lib/Mac/Errors.html А еше проще открыть хедер MacErrors.h
Также стоит глянуть Processes.h, там перед каждой ф-цией короткое описание, обычно его хватает. Ну и Xcode показывает текст OSErr в окне переменных
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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