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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Функция LoadKeyboardLayoutA тормозит окна  (Прочитано 9291 раз)
yarick
Гость
« : Июнь 19, 2013, 10:42 »

Решил сделать переключение раскладки на русскую при открытии окна Qt приложения. В конструкторе класса, наследуемого от QMainWindow, написал

Код:
LoadKeyboardLayoutA("00000419", KLF_ACTIVATE);

Работать то оно работает, но вот окно заметно подлагивает в момент открытия - даже для релиза(

Кроме того - я измерил время выполнения этой строчки по таймеру - 0,5 сек! Да майкрософт с ума чтоли сошли?
« Последнее редактирование: Июнь 19, 2013, 10:49 от Ярик » Записан
Bepec
Гость
« Ответ #1 : Июнь 19, 2013, 10:49 »

Вроде уже было - это системная функция. Никак вроде не избавиться, но могу  и не помнить подробностей.
Записан
yarick
Гость
« Ответ #2 : Июнь 19, 2013, 10:54 »

Нашёл. Мда, это ещё один аргумент чтобы переходить на линукс
Записан
Bepec
Гость
« Ответ #3 : Июнь 19, 2013, 10:55 »

Есть всегда обходные пути. Ещё один повод ломать голову в линуксе, устанавливая программы? не не не Улыбающийся
Записан
yarick
Гость
« Ответ #4 : Июнь 19, 2013, 11:00 »

А какие обходные пути? Я просто хочу чтобы когда пользователь переключался в текстовый редактор, у него русский включался автоматически.

Насколько я понял, то через винапи LoadKeyboardLayoutA решение проблемы не существует. Откладывание через таймер попробовал - но оно не помогает, мне нужно сразу же изменить раскладку
Записан
Serr500
Гость
« Ответ #5 : Июнь 19, 2013, 11:21 »

http://www.prog.org.ru/topic_23910_0.html
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #6 : Июнь 19, 2013, 15:44 »

Это так работает, и ничего нельзя сделать. В той теме что дали выше я нашёл только одно решение через события, которое возможно подойдёт тебе (потому что я меняю раскладку в чужом окне, а не своём):

Код
C++ (Qt)
SendMessage(hwnd, WM_INPUTLANGCHANGEREQUEST, INPUTLANGCHANGE_SYSCHARSET, 0x04090409);

не помню, нужно ли делать AttachThreadInput при отсылке этого события в чужое окно.
« Последнее редактирование: Июнь 19, 2013, 15:48 от Alex Custov » Записан
yarick
Гость
« Ответ #7 : Июнь 21, 2013, 16:18 »

Ладно, а почему тогда при нажатии alt+shift ничего не тормозит? Есть идея - может через винапи сэмулировать нажатие клавиш?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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