Я пытаюсь создать упрощенный текстовый редактор (или клон приложения для заметок) для настольных компьютеров и Android. В качестве минимального воспроизводимого примера у меня есть центральный виджет с QVBoxLayout, который содержит QTextEdit.
На мобильном телефоне (я тестировал только свой телефон Android) QTextEdit изначально изменяет размер до оставшегося доступного пространства, когда видна клавиатура Android, добавляя при необходимости полосу прокрутки для более длинных текстов - это и есть предполагаемое поведение.
Но при редактировании, если я вставляю новую строку или перемещаюсь при перемещении курсора вверх или вниз на строку QTextEdit «вырастает» обратно до полноэкранного размера и отображает текст и пользовательский интерфейс под клавиатурой.
В качестве еще одной меры я попробовал добавить второй виджет в QVBoxLayout. Конечно же, сначала он виден над клавиатурой, когда вводится текст, но затем исчезает под клавиатурой, когда я нажимаю Enter или перемещаю курсор.
Иногда я могу вернуть его в правильное положение/раскладку/размер, если закрываю и снова открываю клавиатуру, но это также несовместимо.
Как сделать так, чтобы QTextEdit (и любой виджет в целом) не изменял размер или не увеличивался, когда экранная клавиатура Android открыта все еще активен?
Минимальный пример
widget.h:
#ifndef WIDGET_H
#define WIDGET_H
#include
#include
#include
class Widget : public QWidget {
Q_OBJECT
QTextEdit* child;
QLayout* layout;
public:
Widget(QWidget *parent = nullptr);
~Widget();
};
#endif // WIDGET_H
widget.cpp:
#include "widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
child = new QTextEdit();
layout = new QVBoxLayout();
layout->addWidget(child);
setLayout(layout);
}
Widget::~Widget() {
delete layout;
delete child;
}
main.cpp:
#include "widget.h"
#include
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... on-android