Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: Swa от Январь 15, 2010, 22:02



Название: Определение раскладки клавиатуры
Отправлено: Swa от Январь 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


Название: Re: Определение раскладки клавиатуры
Отправлено: Swa от Январь 16, 2010, 18:08
Просьба ко всем, у кого linux, потестите мой пример, у кого как работает, пожалуйста.


Название: Re: Определение раскладки клавиатуры
Отправлено: zenden от Январь 16, 2010, 19:25
Вот здесь у людей та же проблема http://stackoverflow.com/questions/1277093/qt-keyboard-layout


Название: Re: Определение раскладки клавиатуры
Отправлено: Swa от Январь 16, 2010, 20:47
Вот здесь у людей та же проблема http://stackoverflow.com/questions/1277093/qt-keyboard-layout

Да, но это редкая проблема, вот тут нашёл багрепорт, похоже такое только у меня и этого парня происходит
http://bugreports.qt.nokia.com/browse/QTBUG-3631


Название: Re: Определение раскладки клавиатуры
Отправлено: crossly от Январь 16, 2010, 23:49
не только.... у меня та же проблема.... причем на сколько я помню на 4.5 такой проблемы не было.... по крайней мене на винде...


Название: Re: Определение раскладки клавиатуры
Отправлено: Swa от Январь 17, 2010, 00:08
crossly, да, на винде я протестировал, работает правильно. Проблема, похоже, только в линуксе.


Название: Re: Определение раскладки клавиатуры
Отправлено: crossly от Январь 17, 2010, 00:19
какая версия Qt... ?? у меня из git .... не работает и на винде... :)... хотя на 4.5 работало ....


Название: Re: Определение раскладки клавиатуры
Отправлено: Swa от Январь 17, 2010, 00:53
У меня 4.5.0


Название: Re: Определение раскладки клавиатуры
Отправлено: Karl-Philipp от Февраль 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.
Помогите, пожалуйста, разобраться.


Название: Re: Определение раскладки клавиатуры
Отправлено: SABROG от Февраль 10, 2011, 11:51
У меня же Qt 4.7.0 из SDK, Windows 7.
Помогите, пожалуйста, разобраться.
Пофиксили видимо только для линукса. Под виндой для 4.7.1 таже проблема http://bugreports.qt.nokia.com/browse/QTBUG-15816


Название: Re: Определение раскладки клавиатуры
Отправлено: Karl-Philipp от Февраль 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
Скажите, пожалуйста, правильно?


Название: Re: Определение раскладки клавиатуры
Отправлено: kuzulis от Февраль 10, 2011, 16:44
1. Можно попробовать вызывать GetKeyboardLayout с нулём.
2. Вместо if/else нарисовать switch/case
3. Или вместо GetKeyboardLayout попробовать GetKeyboardLayoutName


Название: Re: Определение раскладки клавиатуры
Отправлено: Karl-Philipp от Февраль 11, 2011, 22:30
Спасибо, kuzulis.
п.2. Учел, а чем не устроил вариант с WinAPI функциями, которые я предложил? Аналогичное делают + работают :)


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