Класс 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 для части строки предварительного редактирования, заданной началом и длиной. Значение содержит QVariant типа QTextFormat, определяющего отображение этой части строки предварительного редактирования. Должна быть не более одной настройки формата для каждой части строки предварительного редактирования. Если для любого символа строки задано несколько, поведение не определено. Соответствующая реализация должна по крайней мере соблюдать свойства backgroundColor, textColor и fontUnderline формата. |
QInputMethodEvent::Cursor |
1 |
Если установлено, курсор должен быть показан внутри строки предварительного редактирования в позиции start. Переменная length определяет, виден ли курсор. Если длина равна 0, курсор невидим. Если значение является QVariant типа QColor, этот цвет будет использоваться для отображения курсора, в противном случае используется цвет окружающего текста. Должен быть не более одного атрибута Cursor на событие. Если задано несколько, поведение не определено. |
QInputMethodEvent::Language |
2 |
Вариант содержит объект QLocale, определяющий язык определенной части строки предварительного редактирования. Должен быть не более одного языка для каждой части строки предварительного редактирования. Если для любого символа строки задано несколько, поведение не определено. |
QInputMethodEvent::Ruby |
3 |
Текст ruby для части строки предварительного редактирования. Должен быть не более одного текста ruby для каждой части строки предварительного редактирования. Если для любого символа строки задано несколько, поведение не определено. |
QInputMethodEvent::Selection |
4 |
Если установлено, курсор редактирования должен быть перемещен в указанную позицию в содержимом текста редактора. В отличие от Cursor, этот атрибут не работает со строкой предварительного редактирования, а с окружающим текстом. Курсор будет перемещен после того, как строка подтверждения будет подтверждена, а строка предварительного редактирования будет расположена в новой позиции редактирования. Позиция start задает новую позицию, а переменная length может использоваться для установки выделения, начиная с этой точки. Значение не используется. |
См. также Attribute.
Документация функций-членов
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() и Attribute.
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.15/qinputmethodevent.html