Класс QInputMethodEvent
Класс QInputMethodEvent предоставляет параметры для событий ввода. Подробнее...
| Заголовок: | #include <QInputMethodEvent> |
| CMake: | find_package(Qt6 COMPONENTS Gui REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
| Наследует: | QEvent |
Типы публичного доступа
| класс | Атрибут |
| перечисление | AttributeType { TextFormat, Cursor, Language, Ruby, Selection } |
Функции публичного доступа
| 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, удалит последний символ перед строкой предварительного редактирования и первый символ после неё, и вставит строку commit непосредственно перед строкой предварительного редактирования.
Если виджет реализует отмену/повтор, эта операция добавляется в стек отмены/повтора.
- Если текущей строки предварительного редактирования нет, вставить preeditString() в текущую позицию курсора; в противном случае заменить предыдущую preeditString на полученную из этого события.
Если виджет реализует отмену/повтор, preeditString() не должна влиять на стек отмены/повтора никоим образом.
Виджет должен проверить список атрибутов, чтобы применить их к строке предварительного редактирования. Он должен понимать по крайней мере атрибуты TextFormat и Cursor и отображать их согласно заданным параметрам.
См. также QInputMethod.
Документация по типам членов
перечисление QInputMethodEvent::AttributeType
| Константа | Значение | Описание |
|---|---|---|
QInputMethodEvent::TextFormat |
0 |
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, этот атрибут не работает со строкой предварительного редактирования, а с окружающим текстом. Курсор будет перемещён после того, как строка commit будет подтверждена, а строка предварительного редактирования будет расположена в новой позиции редактирования. Позиция начала не используется. |
См. также Атрибут.
Документация по членам-функциям
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-6.2/qinputmethodevent.html