Название: 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->setText( text ) не эмитирует textChanged(text) то есть, совсем. Хотя может быть, если после setText() послать Enter или сделать commit - то сработает. Пока не пробовал. В Linux разумеется всё нормально. Название: Re: QLineEdit в Android работает иначе Отправлено: Гурман от Май 14, 2019, 16:41 Код: QKeyEvent ke(QEvent::KeyPress, Qt::Key_Enter, 0,0,0); Код: ui->lineEdit->activateWindow(); Название: Re: QLineEdit в Android работает иначе Отправлено: Гурман от Май 14, 2019, 16:50 Ещё заметил - после первой установки курсора в строку и появления клавиатуры набираемый текст подчёркнут. И при этом курсор пальцем не перемещается. Если переместить курсор виртуальными кнопками клавиатуры влево-вправо - клавиатура остаётся, строка попадает в QLineEdit, подчёркивание исчезает, появляется кнопка очистки, дальнейший набор выдаёт textChanged().
Ага... Глюк вылазит если передать в начале пустую строку. Если передать не пустую, то всё работает нормально. В Linux такого нет, там и с пустой строкой в начале нормально работает. Пойду оформлять баг-репорт... ;:%№%:;№%!!!!!..... Если очистить строку любым способом, в том числе кнопкой очистки на ней самой - она снова перестаёт работать. Название: Re: QLineEdit в Android работает иначе Отправлено: Авварон от Май 14, 2019, 18:29 А зачем виджеты на ондройде?
Название: Re: QLineEdit в Android работает иначе Отправлено: Гурман от Май 14, 2019, 18:33 Название: Re: QLineEdit в Android работает иначе Отправлено: Гурман от Май 14, 2019, 18:43 О! Исследовав багрепорты нашёл совершенно неочевидный хак, но практически лечащий этот баг - надо вызвать
Код: ui->lineEdit->setInputMethodHints(Qt::ImhNoPredictiveText); Кстати, очень похожие описания багов есть и про QML InputText - очевидно для проверки вводимого текста используется тот же код, что и для виджетов. Что вполне логично, поскольку там приличная клюква с проверками допустимости ввода, поддержкой паролей и т.д. Нелогично было бы писать это всё отдельно для QtQuick, если есть проверенное и работающее для виджетов. |