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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Определение раскладки клавиатуры  (Прочитано 16612 раз)
Swa
Самовар
**
Offline Offline

Сообщений: 170


Просмотр профиля
« : Январь 15, 2010, 22:02 »

Здравствуйте.
Возникла проблема определения раскладки клавиатуры. Вешаю на виджет keyPressEvent и в нём делаю вывод:
Код:
qDebug() << QLocale::languageToString(QLocale::system().language());
qDebug() << QLocale::languageToString(QApplication::keyboardInputLocale ().language());
QLocale::system().language() выдаёт "Russian"
QApplication::keyboardInputLocale ().language() выдаёт "C", что согласно справке The "C" locale is English/UnitedStates..
Причём при изменении раскладки средствами Alt+Shift язык ввода меняется, но qDebug выдаёт эти же строки. Что посоветуете?
Виджет: QLineEdit
Система: Linux
Записан
Swa
Самовар
**
Offline Offline

Сообщений: 170


Просмотр профиля
« Ответ #1 : Январь 16, 2010, 18:08 »

Просьба ко всем, у кого linux, потестите мой пример, у кого как работает, пожалуйста.
Записан
zenden
Гость
« Ответ #2 : Январь 16, 2010, 19:25 »

Вот здесь у людей та же проблема http://stackoverflow.com/questions/1277093/qt-keyboard-layout
« Последнее редактирование: Январь 16, 2010, 19:27 от zenden » Записан
Swa
Самовар
**
Offline Offline

Сообщений: 170


Просмотр профиля
« Ответ #3 : Январь 16, 2010, 20:47 »

Вот здесь у людей та же проблема http://stackoverflow.com/questions/1277093/qt-keyboard-layout

Да, но это редкая проблема, вот тут нашёл багрепорт, похоже такое только у меня и этого парня происходит
http://bugreports.qt.nokia.com/browse/QTBUG-3631
Записан
crossly
Гость
« Ответ #4 : Январь 16, 2010, 23:49 »

не только.... у меня та же проблема.... причем на сколько я помню на 4.5 такой проблемы не было.... по крайней мене на винде...
Записан
Swa
Самовар
**
Offline Offline

Сообщений: 170


Просмотр профиля
« Ответ #5 : Январь 17, 2010, 00:08 »

crossly, да, на винде я протестировал, работает правильно. Проблема, похоже, только в линуксе.
Записан
crossly
Гость
« Ответ #6 : Январь 17, 2010, 00:19 »

какая версия Qt... ?? у меня из git .... не работает и на винде... Улыбающийся... хотя на 4.5 работало ....
Записан
Swa
Самовар
**
Offline Offline

Сообщений: 170


Просмотр профиля
« Ответ #7 : Январь 17, 2010, 00:53 »

У меня 4.5.0
Записан
Karl-Philipp
Гость
« Ответ #8 : Февраль 09, 2011, 13:35 »

Всем привет.

Не получается определить текущую раскладку клавиатуры. Все время выдает ru_Ru.

Код
C++ (Qt)
#include <QtCore>
#include <QtGui>
 
int main(int argc, char* argv[])
{
   QApplication app(argc, argv);
   QDialog *dialog = new QDialog;
   QLabel *label = new QLabel(dialog);
   QString *str = new QString();
   *str = app.keyboardInputLocale().name();
   label->setText(*str);
   dialog->show();
   return app.exec();
}

По приведенной выше ссылке http://bugreports.qt.nokia.com/browse/QTBUG-3631, сказано, что баг устранен в версии 4.7.0

У меня же Qt 4.7.0 из SDK, Windows 7.
Помогите, пожалуйста, разобраться.
Записан
SABROG
Гость
« Ответ #9 : Февраль 10, 2011, 11:51 »

У меня же Qt 4.7.0 из SDK, Windows 7.
Помогите, пожалуйста, разобраться.
Пофиксили видимо только для линукса. Под виндой для 4.7.1 таже проблема http://bugreports.qt.nokia.com/browse/QTBUG-15816
Записан
Karl-Philipp
Гость
« Ответ #10 : Февраль 10, 2011, 14:58 »

Спасибо, SABROG.

Сделал вот так:

Код
C++ (Qt)
#ifdef Q_WS_WIN
 
   int i = (int)GetKeyboardLayout(GetCurrentThreadId());
 
   if(i == 68748313) //Russian
      //do smth
   else if(i == 67699721) //English
      //do smth
   else if(i == 69338146)  //Ukrainian
      //do smth
   else //unknown language
#endif
Скажите, пожалуйста, правильно?
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #11 : Февраль 10, 2011, 16:44 »

1. Можно попробовать вызывать GetKeyboardLayout с нулём.
2. Вместо if/else нарисовать switch/case
3. Или вместо GetKeyboardLayout попробовать GetKeyboardLayoutName
Записан

ArchLinux x86_64 / Win10 64 bit
Karl-Philipp
Гость
« Ответ #12 : Февраль 11, 2011, 22:30 »

Спасибо, kuzulis.
п.2. Учел, а чем не устроил вариант с WinAPI функциями, которые я предложил? Аналогичное делают + работают Улыбающийся
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #13 : Февраль 13, 2011, 13:31 »

Цитировать
п.2. Учел, а чем не устроил вариант с WinAPI функциями, которые я предложил? Аналогичное делают + работают Улыбающийся
Просто, если б не заработала GetKeyboardLayout  - то можно было бы попробовать GetKeyboardLayoutName. Типа для GetKeyboardLayoutName не нужно никаких входных параметров писать. А хотя - хз, если честно.
Записан

ArchLinux x86_64 / Win10 64 bit
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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