Класс QInputMethodEvent
Класс QInputMethodEvent предоставляет параметры для событий ввода. Подробнее...
| Заголовок: | #include <QInputMethodEvent> |
| qmake: | QT += gui |
| Наследует: | QEvent |
Типы публичного доступа
| класс | Attribute |
| перечисление | AttributeType { TextFormat, Cursor, Language, Ruby, Selection } |
Функции публичного доступа
| QInputMethodEvent(const QInputMethodEvent &other) | |
| QInputMethodEvent(const QString &preeditText, const QList<QInputMethodEvent::Attribute> &attributes) | |
| QInputMethodEvent() | |
| const QList<QInputMethodEvent::Attribute> & | attributes() const |
| const QString & | commitString() const |
| const QString & | preeditString() const |
| int | replacementLength() const |
| int | replacementStart() const |
| void | setCommitString(const QString &commitString, int replaceFrom = 0, int replaceLength = 0) |
Подробное описание
События ввода передаются виджетам при использовании метода ввода для ввода текста в виджет. Методы ввода широко используются для ввода текста для языков с нелатинскими алфавитами.
Обратите внимание, что при создании пользовательских виджетов редактирования текста атрибут окна Qt::WA_InputMethodEnabled должен быть явно задан (с помощью функции QWidget::setAttribute()), чтобы получать события ввода.
Эти события представляют интерес для авторов виджетов ввода с клавиатуры, которые хотят иметь возможность правильно обрабатывать языки со сложным вводом символов. Ввод текста на таких языках обычно происходит в три этапа:
-
Начало ввода
Когда пользователь нажимает первую клавишу на клавиатуре, создается контекст ввода. Этот контекст будет содержать строку набранных символов.
-
Ввод
При каждом нажатии новой клавиши метод ввода попытается создать соответствующую строку для введенного текста, называемую строкой предварительного редактирования. Пока активен контекст ввода, пользователь может перемещать курсор только внутри строки, относящейся к этому контексту ввода.
-
Завершение
В какой-то момент пользователь активирует элемент пользовательского интерфейса (возможно, используя определенную клавишу), где может выбрать из ряда строк, соответствующих введенному тексту. Пользователь может либо подтвердить свой выбор, либо отменить ввод; в любом случае контекст ввода будет закрыт.
QInputMethodEvent моделирует эти три этапа и передает информацию, необходимую для корректного отображения промежуточного результата. QInputMethodEvent имеет два основных параметра: preeditString() и commitString(). Параметр preeditString() предоставляет текущую строку предварительного редактирования. Параметр commitString() предоставляет текст, который должен быть добавлен к (или заменить части) текста виджета редактора. Обычно это результат операций ввода, и его необходимо вставить в текст виджетов непосредственно перед строкой предварительного редактирования.
Если commitString() должен заменить части текста в редакторе, replacementLength() будет содержать количество символов, которые необходимо заменить. replacementStart() содержит позицию, в которой символы должны быть заменены, относительно начала строки предварительного редактирования.
Несколько атрибутов контролируют визуальное отображение строки предварительного редактирования (визуальное отображение текста за пределами строки предварительного редактирования контролируется только виджетом). Перечисление AttributeType описывает различные атрибуты, которые можно задать.
Класс, реализующий QWidget::inputMethodEvent() или QGraphicsItem::inputMethodEvent(), должен, по крайней мере, понимать и учитывать атрибуты TextFormat и Cursor.
Так как методам ввода необходимо иметь возможность запрашивать определенные свойства у виджета или графического элемента, подклассы также должны реализовывать QWidget::inputMethodQuery() и QGraphicsItem::inputMethodQuery() соответственно.
При получении события ввода, виджет текста должен выполнить следующие шаги:
- Если в виджете выбран текст, выбранный текст должен быть удален.
- Удалить текст, начиная с replacementStart() длиной replacementLength() и заменить его на commitString(). Если replacementLength() равно 0, replacementStart() определяет позицию вставки commitString().
При замене область строки предварительного редактирования игнорируется, таким образом, замена, начинающаяся с -1 длиной 2, удалит последний символ перед строкой предварительного редактирования и первый символ после неё, и вставит строку подтверждения непосредственно перед строкой предварительного редактирования.
Если виджет реализует отмену/повтор, эта операция добавляется в стек отмены/повтора.
- Если нет текущей строки предварительного редактирования, вставьте preeditString() в текущую позицию курсора; в противном случае замените предыдущую preeditString на полученную из этого события.
Если виджет реализует отмену/повтор, preeditString() никак не должна влиять на стек отмены/повтора.
Виджет должен проверить список атрибутов, чтобы применить их к строке предварительного редактирования. Он должен понимать по крайней мере атрибуты TextFormat и Cursor и отображать их согласно указаниям.
См. также QInputMethod.
Документация по типам членов
перечисление QInputMethodEvent::AttributeType
| Константа | Значение | Описание |
|---|---|---|
QInputMethodEvent::TextFormat |
0 |
A QTextCharFormat для части строки предварительного редактирования, указанной параметрами start и length. значение содержит QVariant типа QTextFormat, определяющего отображение этой части строки предварительного редактирования. Должна быть не более одной настройки для каждой части строки предварительного редактирования. Если для любого символа в строке задано несколько настроек, поведение не определено. Соответствующая реализация должна, по крайней мере, учитывать свойства backgroundColor, textColor и fontUnderline настроек. |
QInputMethodEvent::Cursor |
1 |
Если установлено, курсор должен отображаться внутри строки предварительного редактирования в позиции start. Переменная length определяет, виден ли курсор. Если длина равна 0, курсор невидим. Если значение является QVariant типа QColor, этот цвет будет использован для отображения курсора, в противном случае используется цвет окружающего текста. Должна быть не более одной атрибуты Cursor на событие. Если задано несколько, поведение не определено. |
QInputMethodEvent::Language |
2 |
Переменная содержит объект QLocale, определяющий язык определённой части строки предварительного редактирования. Должна быть не более одной настройки языка для каждой части строки предварительного редактирования. Если для любого символа в строке задано несколько настроек, поведение не определено. |
QInputMethodEvent::Ruby |
3 |
Текст для строки рубрика для части строки предварительного редактирования. Должна быть не более одной настройки текста рубрики для каждой части строки предварительного редактирования. Если для любого символа в строке задано несколько настроек, поведение не определено. |
QInputMethodEvent::Selection |
4 |
Если установлено, курсор редактирования должен быть перемещен в указанную позицию в содержимом текста редактора. В отличие от Cursor, этот атрибут не работает со строкой предварительного редактирования, а с окружающим текстом. Курсор будет перемещен после того, как строка подтверждения будет подтверждена, и строка предварительного редактирования будет расположена в новой позиции редактирования. Позиция начала указывает новую позицию, а переменная длины может использоваться для установки выделения, начиная с этой точки. Значение не используется. |
См. также Атрибут.
Документация по функциям-членам
QInputMethodEvent::QInputMethodEvent(const QInputMethodEvent &other)
Создаёт копию other.
QInputMethodEvent::QInputMethodEvent(const QString &preeditText, const QList<QInputMethodEvent::Attribute> &attributes)
Создаёт событие типа QEvent::InputMethod. Текст предварительного редактирования установлен в preeditText, атрибуты в attributes.
Значения commitString(), replacementStart() и replacementLength() могут быть установлены с помощью setCommitString().
См. также preeditString() и attributes().
QInputMethodEvent::QInputMethodEvent()
Создаёт событие типа QEvent::InputMethod. attributes(), preeditString(), commitString(), replacementStart() и replacementLength() инициализируются значениями по умолчанию.
См. также setCommitString().
const QList<QInputMethodEvent::Attribute> &QInputMethodEvent::attributes() const
Возвращает список атрибутов, переданных конструктору QInputMethodEvent. Атрибуты управляют визуальным отображением строки предварительного редактирования (визуальное отображение текста вне строки предварительного редактирования контролируется только виджетом).
См. также preeditString() и Атрибут.
const QString &QInputMethodEvent::commitString() const
Возвращает текст, который должен быть добавлен к (или заменить части) текста виджета редактора. Обычно это результат операций ввода и должен быть вставлен в текст виджетов непосредственно перед строкой предварительного редактирования.
См. также setCommitString(), preeditString(), replacementStart() и replacementLength().
const QString &QInputMethodEvent::preeditString() const
Возвращает текст предварительного редактирования, то есть текст перед тем, как пользователь начал его редактировать.
См. также commitString() и attributes().
int QInputMethodEvent::replacementLength() const
Возвращает количество символов, которые нужно заменить в строке предварительного редактирования.
См. также replacementStart() и setCommitString().
int QInputMethodEvent::replacementStart() const
Возвращает позицию, в которой символы должны быть заменены относительно начала строки предварительного редактирования.
См. также replacementLength() и setCommitString().
void QInputMethodEvent::setCommitString(const QString &commitString, int replaceFrom = 0, int replaceLength = 0)
Устанавливает строку подтверждения в commitString.
Строка подтверждения — это текст, который должен быть добавлен к (или заменить части) текста виджета редактора. Обычно это результат операций ввода и должен быть вставлен в текст виджетов непосредственно перед строкой предварительного редактирования.
Если строка подтверждения должна заменить части текста в редакторе, replaceLength указывает количество заменяемых символов. replaceFrom указывает позицию, в которой символы должны быть заменены относительно начала строки предварительного редактирования.
См. также commitString(), replacementStart() и replacementLength().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.13/qinputmethodevent.html