Russian Qt Forum
Апрель 19, 2024, 01:07
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
QLineEdit в Android работает иначе
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QLineEdit в Android работает иначе (Прочитано 4518 раз)
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
QLineEdit в Android работает иначе
«
:
Май 14, 2019, 16:07 »
Одно и то же приложение собрано в Linux и Android. Есть строка ввода QLineEdit. В Linux работает как положено - устанавливаешь мышкой курсор, начинаешь вводить, появляется кнопка-символ очистки строки (разрешён в настройках), полетели сигналы textChanged(). В Android не так. Когда устанавливаешь курсор тапом в строку, появляется виртуальная клавиатура, но при вводе нет ни сигналов textChanged(), ни кнопки очистки строки. Нормально работает placeholderText - он появляется когда строка пустая, исчезает когда что-то в неё есть. Текст редактируется полностью но без сигнала textChanged(). Пока не нажмёшь Enter - тогда виртуальная клавиатура исчезает, появляется кнопка очистки и вылетает сигнал textChanged(). Если теперь снова тапнуть в строку, клавиатура появится, кнопка не исчезнет, набор текста и другое редактирование будут выдавать сигнал textChanged() - то есть, будет работать как должно. Судя по всему это баг, вызванный собственной буферизацией текста Android. Может быть помогло бы сделать сбоку commit редакторе, но пока не ясно как это сделать. Как побороть, не понятно.
Код:
ui->lineEdit->setFocus();
ui->lineEdit->clearFocus();
Не помогают.
Ну и, заодно ещё ui->lineEdit->setText( text ) не эмитирует textChanged(text) то есть, совсем. Хотя может быть, если после setText() послать Enter или сделать commit - то сработает. Пока не пробовал. В Linux разумеется всё нормально.
Записан
2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Re: QLineEdit в Android работает иначе
«
Ответ #1 :
Май 14, 2019, 16:41 »
Код:
QKeyEvent ke(QEvent::KeyPress, Qt::Key_Enter, 0,0,0);
QCoreApplication::sendEvent( ui->lineEdit, &ke );
не помогает.
Код:
ui->lineEdit->activateWindow();
тоже
«
Последнее редактирование: Май 14, 2019, 16:46 от Гурман
»
Записан
2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Re: QLineEdit в Android работает иначе
«
Ответ #2 :
Май 14, 2019, 16:50 »
Ещё заметил - после первой установки курсора в строку и появления клавиатуры набираемый текст подчёркнут. И при этом курсор пальцем не перемещается. Если переместить курсор виртуальными кнопками клавиатуры влево-вправо - клавиатура остаётся, строка попадает в QLineEdit, подчёркивание исчезает, появляется кнопка очистки, дальнейший набор выдаёт textChanged().
Ага... Глюк вылазит если передать в начале пустую строку. Если передать не пустую, то всё работает нормально. В Linux такого нет, там и с пустой строкой в начале нормально работает. Пойду оформлять баг-репорт...
;:%№%:;№%!!!!!..... Если очистить строку любым способом, в том числе кнопкой очистки на ней самой - она снова перестаёт работать.
«
Последнее редактирование: Май 14, 2019, 18:10 от Гурман
»
Записан
2^7-1 == 127, задумайтесь...
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3258
Re: QLineEdit в Android работает иначе
«
Ответ #3 :
Май 14, 2019, 18:29 »
А зачем виджеты на ондройде?
Записан
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Re: QLineEdit в Android работает иначе
«
Ответ #4 :
Май 14, 2019, 18:33 »
Цитата: Авварон от Май 14, 2019, 18:29
А зачем виджеты на ондройде?
ТАК НАДО!!!
Записан
2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Re: QLineEdit в Android работает иначе
«
Ответ #5 :
Май 14, 2019, 18:43 »
О! Исследовав багрепорты нашёл совершенно неочевидный хак, но практически лечащий этот баг - надо вызвать
Код:
ui->lineEdit->setInputMethodHints(Qt::ImhNoPredictiveText);
Строка начинает работать после ввода первого символа. Правда при программном setText("") сигнал textChanged("") всё равно не выдаётся - очевидно если строка была пустая, она не изменилась. Но мне надо ловить все случаи когда в строку что-то приходит. Это уже решается простым способом - если в setText("") строка пустая, то сразу передаётся setText(" "), и clear(). А в обработчике сигнала textChanged(" ") один пробел игнорируется с немедленным возвратом. На clear() будет выдан повторный textChanged(""), который я считаю соответствующим setText(""). В большинстве случаев схляет.
Кстати, очень похожие описания багов есть и про QML InputText - очевидно для проверки вводимого текста используется тот же код, что и для виджетов. Что вполне логично, поскольку там приличная клюква с проверками допустимости ввода, поддержкой паролей и т.д. Нелогично было бы писать это всё отдельно для QtQuick, если есть проверенное и работающее для виджетов.
«
Последнее редактирование: Май 14, 2019, 19:22 от Гурман
»
Записан
2^7-1 == 127, задумайтесь...
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...