Russian Qt Forum

Qt => Общие вопросы => Тема начата: yarick от Июнь 19, 2013, 10:42



Название: Функция LoadKeyboardLayoutA тормозит окна
Отправлено: yarick от Июнь 19, 2013, 10:42
Решил сделать переключение раскладки на русскую при открытии окна Qt приложения. В конструкторе класса, наследуемого от QMainWindow, написал

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

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

Кроме того - я измерил время выполнения этой строчки по таймеру - 0,5 сек! Да майкрософт с ума чтоли сошли?


Название: Re: Функция LoadKeyboardLayoutA тормозит окна
Отправлено: Bepec от Июнь 19, 2013, 10:49
Вроде уже было - это системная функция. Никак вроде не избавиться, но могу  и не помнить подробностей.


Название: Re: Функция LoadKeyboardLayoutA тормозит окна
Отправлено: yarick от Июнь 19, 2013, 10:54
Нашёл. Мда, это ещё один аргумент чтобы переходить на линукс


Название: Re: Функция LoadKeyboardLayoutA тормозит окна
Отправлено: Bepec от Июнь 19, 2013, 10:55
Есть всегда обходные пути. Ещё один повод ломать голову в линуксе, устанавливая программы? не не не :)


Название: Re: Функция LoadKeyboardLayoutA тормозит окна
Отправлено: yarick от Июнь 19, 2013, 11:00
А какие обходные пути? Я просто хочу чтобы когда пользователь переключался в текстовый редактор, у него русский включался автоматически.

Насколько я понял, то через винапи LoadKeyboardLayoutA решение проблемы не существует. Откладывание через таймер попробовал - но оно не помогает, мне нужно сразу же изменить раскладку


Название: Re: Функция LoadKeyboardLayoutA тормозит окна
Отправлено: Serr500 от Июнь 19, 2013, 11:21
http://www.prog.org.ru/topic_23910_0.html (http://www.prog.org.ru/topic_23910_0.html)


Название: Re: Функция LoadKeyboardLayoutA тормозит окна
Отправлено: Alex Custov от Июнь 19, 2013, 15:44
Это так работает, и ничего нельзя сделать. В той теме что дали выше я нашёл только одно решение через события, которое возможно подойдёт тебе (потому что я меняю раскладку в чужом окне, а не своём):

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

не помню, нужно ли делать AttachThreadInput при отсылке этого события в чужое окно.


Название: Re: Функция LoadKeyboardLayoutA тормозит окна
Отправлено: yarick от Июнь 21, 2013, 16:18
Ладно, а почему тогда при нажатии alt+shift ничего не тормозит? Есть идея - может через винапи сэмулировать нажатие клавиш?