Класс QInputMethodEvent
Класс QInputMethodEvent предоставляет параметры для событий ввода с использованием методов ввода. Подробнее...
| Заголовок: | #include <QInputMethodEvent> |
| qmake: | QT += gui |
| Наследует: | QEvent |
Типы
| класс | Атрибут |
| перечисление | ТипАтрибута { ФорматТекста, Курсор, Язык, Иероглифы, Выделение } |
Публичные функции
| QInputMethodEvent() | |
| QInputMethodEvent(const QString &предобработанныйТекст, const QList<QInputMethodEvent::Attribute> &атрибуты) | |
| QInputMethodEvent(const QInputMethodEvent &другой) | |
| виртуальный | ~QInputMethodEvent() |
| const QList<QInputMethodEvent::Attribute> & | атрибуты() const |
| const QString & | строкаПодтверждения() const |
| const QString & | предобработаннаяСтрока() const |
| int | длинаЗамены() const |
| int | началоЗамены() const |
| void | установитьСтрокуПодтверждения(const QString &строкаПодтверждения, int заменитьС = 0, int длинаЗамены = 0) |
- 6 публичных функций, унаследованных от QEvent
Дополнительные унаследованные члены
Подробное описание
Класс QInputMethodEvent предоставляет параметры для событий ввода с использованием методов ввода.
События методов ввода отправляются виджетам, когда метод ввода используется для ввода текста в виджет. Методы ввода широко используются для ввода текста для языков с нелатинскими алфавитами.
Обратите внимание, что при создании пользовательских виджетов редактирования текста атрибут окна Qt::WA_InputMethodEnabled необходимо явно установить (используя функцию QWidget::setAttribute()), чтобы получать события методов ввода.
События представляют интерес для авторов виджетов ввода с клавиатуры, которые хотят правильно обрабатывать языки с сложным вводом символов. Ввод текста на таких языках обычно является трехэтапным процессом:
-
Начало составления
Когда пользователь нажимает первую клавишу на клавиатуре, создается контекст ввода. Этот контекст будет содержать строку набранных символов.
-
Составление
При каждом нажатии новой клавиши метод ввода попытается создать соответствующую строку для введенного до этого текста, которая называется предобработанной строкой. Пока активен контекст ввода, пользователь может только перемещать курсор внутри строки, принадлежащей этому контексту ввода.
-
Завершение
В какой-то момент пользователь активирует элемент пользовательского интерфейса (возможно, используя определенную клавишу), где он может выбрать из ряда строк, соответствующих введенному до этого тексту. Пользователь может либо подтвердить свой выбор, либо отменить ввод; в любом случае контекст ввода будет закрыт.
QInputMethodEvent моделирует эти три стадии и передает информацию, необходимую для корректного отображения промежуточного результата. У QInputMethodEvent есть два основных параметра: предобработаннаяСтрока() и строкаПодтверждения(). Параметр предобработаннаяСтрока() указывает текущую активную строку предварительной обработки. Параметр строкаПодтверждения() указывает текст, который должен быть добавлен к (или заменить части) текста виджета редактора. Обычно это результат операций ввода и должен быть вставлен в текст виджетов непосредственно перед предобработанной строкой.
Если строкаПодтверждения() должна заменить части текста в редакторе, длинаЗамены() будет содержать число заменяемых символов. началоЗамены() содержит позицию, в которой символы должны быть заменены относительно начала предобработанной строки.
Ряд атрибутов контролирует визуальное представление предобработанной строки (визуальное представление текста за пределами предобработанной строки контролируется только виджетом). Перечисление ТипАтрибута описывает различные атрибуты, которые могут быть установлены.
Класс, реализующий QWidget::inputMethodEvent() или QGraphicsItem::inputMethodEvent() должен, по крайней мере, понимать и учитывать атрибуты ФорматТекста и Курсор.
Поскольку методам ввода необходимо иметь возможность запрашивать определенные свойства у виджета или графического элемента, подклассы также должны реализовывать QWidget::inputMethodQuery() и QGraphicsItem::inputMethodQuery() соответственно.
При получении события метода ввода, виджет текста должен выполнить следующие шаги:
- Если в виджете выбран текст, выбранный текст должен быть удален.
- Удалите текст, начиная с началоЗамены() длиной длинаЗамены(), и замените его на строкаПодтверждения(). Если длинаЗамены() равна 0, началоЗамены() указывает позицию вставки строкаПодтверждения().
При замене область предобработанной строки игнорируется, таким образом, замена, начинающаяся с -1 с длиной 2, удалит последний символ перед предобработанной строкой и первый символ после неё, и вставит строку подтверждения непосредственно перед предобработанной строкой.
Если виджет реализует отмену/повтор, эта операция добавляется в стек отмены/повтора.
- Если нет текущей предобработанной строки, вставьте предобработаннаяСтрока() в текущую позицию курсора; в противном случае замените предыдущую предобработаннаяСтрока полученной от этого события.
Если виджет реализует отмену/повтор, предобработаннаяСтрока() не должна влиять на стек отмены/повтора каким-либо образом.
Виджет должен проверить список атрибутов, чтобы применить их к предобработанной строке. Он должен понимать по крайней мере атрибуты ФорматТекста и Курсор и отображать их в соответствии с указаниями.
См. также QInputMethod.
Документация по типам членов
перечисление QInputMethodEvent::ТипАтрибута
| Константа | Значение | Описание |
|---|---|---|
QInputMethodEvent::TextFormat |
0 |
A QTextCharFormat для части строки предварительного редактирования, заданной параметрами start и length. значение содержит QVariant типа QTextFormat, определяющего отображение этой части строки предварительного редактирования. Должна быть не более одной настройки для каждой части строки предварительного редактирования. Если для любого символа в строке задано несколько настроек, поведение не определено. Корректная реализация должна, по меньшей мере, учитывать свойства backgroundColor, textColor и fontUnderline настроек. |
QInputMethodEvent::Cursor |
1 |
Если установлено, курсор должен отображаться внутри строки предварительного редактирования в позиции start. Переменная length определяет, отображается ли курсор. Если length равно 0, курсор не отображается. Если значение является QVariant типа QColor, этот цвет будет использован для отображения курсора, в противном случае будет использован цвет окружающего текста. Должна быть не более одной атрибуты Cursor на событие. Если задано несколько, поведение не определено. |
QInputMethodEvent::Language |
2 |
Переменная содержит объект QLocale, определяющий язык определённой части строки предварительного редактирования. Для каждой части строки предварительного редактирования должен быть установлен только один язык. Если для любого символа в строке задано несколько языков, поведение не определено. |
QInputMethodEvent::Ruby |
3 |
Текст руби для части строки предварительного редактирования. Должна быть не более одной строки руби для каждой части строки предварительного редактирования. Если для любого символа в строке задано несколько строк руби, поведение не определено. |
QInputMethodEvent::Selection |
4 |
Если установлено, курсор редактирования должен быть перемещен в указанную позицию в содержимом текста редактора. В отличие от Cursor, этот атрибут не работает со строкой предварительного редактирования, а с окружающим текстом. Курсор будет перемещен после того, как строка подтверждения будет подтверждена, а строка предварительного редактирования будет расположена в новой позиции редактирования. Позиция start указывает новую позицию, а переменная length может быть использована для установки выделения, начинающегося с этой точки. Значение не используется. |
См. такжеАтрибут.
Документация по функциям членов
QInputMethodEvent::QInputMethodEvent()
Создаёт событие типа QEvent::InputMethod. attributes(), preeditString(), commitString(), replacementStart() и replacementLength() инициализированы значениями по умолчанию.
См. такжеsetCommitString().
QInputMethodEvent::QInputMethodEvent(const QString &preeditText, const QList<QInputMethodEvent::Attribute> &attributes)
Создаёт событие типа QEvent::InputMethod. Текст предварительного редактирования устанавливается в preeditText, а атрибуты в attributes.
Значения commitString(), replacementStart() и replacementLength() могут быть установлены с помощью setCommitString().
См. также preeditString() и attributes().
QInputMethodEvent::QInputMethodEvent(const QInputMethodEvent &other)
Создаёт копию other.
[virtual] QInputMethodEvent::~QInputMethodEvent()
Удаляет экземпляр QInputMethodEvent. Деструктор виртуальный.
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.12/qinputmethodevent.html