Spec-Zone.ru › Qt 6.1

Класс QInputMethodEvent

Класс QInputMethodEvent предоставляет параметры для событий ввода. Подробнее...

Заголовок: #include <QInputMethodEvent>
CMake: find_package(Qt6 COMPONENTS Gui REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui
Наследуется от: QEvent
  • Список всех членов, включая наследуемые

Открытые типы

класс Attribute
перечисление 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()), чтобы получать события ввода.

События представляют интерес для авторов виджетов ввода с клавиатуры, которые хотят корректно обрабатывать языки со сложным вводом символов. Ввод текста на таких языках обычно происходит в три этапа:

  1. Начало составления

    При нажатии пользователем первой клавиши на клавиатуре создается контекст ввода. Этот контекст будет содержать строку набранных символов.

  2. Составление

    При каждом нажатии новой клавиши метод ввода попытается создать соответствующую строку для набранного до этого текста, называемую строкой предварительного редактирования. Пока активен контекст ввода, пользователь может только перемещать курсор внутри строки, принадлежащей этому контексту ввода.

  3. Завершение

    В какой-то момент пользователь активирует компонент пользовательского интерфейса (возможно, используя определённую клавишу), где он может выбрать из ряда строк, соответствующих тексту, который он набрал до этого. Пользователь может либо подтвердить свой выбор, либо отменить ввод; в любом случае контекст ввода будет закрыт.

QInputMethodEvent моделирует эти три этапа и передает информацию, необходимую для корректного отображения промежуточного результата. QInputMethodEvent имеет два основных параметра: preeditString() и commitString(). Параметр preeditString() предоставляет текущую строку предварительного редактирования. Параметр commitString() предоставляет текст, который должен быть добавлен к (или заменить части) тексту виджета-редактора. Обычно это результат операций ввода и его необходимо вставить в текст виджета непосредственно перед строкой предварительного редактирования.

Если commitString() должен заменить части текста в редакторе, replacementLength() будет содержать количество символов, которые нужно заменить. replacementStart() содержит позицию, в которой символы должны быть заменены относительно начала строки предварительного редактирования.

Ряд атрибутов управляет визуальным представлением строки предварительного редактирования (визуальное представление текста вне строки предварительного редактирования контролируется только виджетом). Перечисление AttributeType описывает различные атрибуты, которые могут быть установлены.

Класс, реализующий QWidget::inputMethodEvent() или QGraphicsItem::inputMethodEvent(), должен по крайней мере понимать и учитывать атрибуты TextFormat и Cursor.

Поскольку методам ввода необходимо иметь возможность запрашивать определённые свойства у виджета или элемента графического интерфейса, подклассы должны также реализовывать QWidget::inputMethodQuery() и QGraphicsItem::inputMethodQuery() соответственно.

При получении события ввода, виджет текста должен выполнить следующие шаги:

  1. Если в виджете выбран текст, выбранный текст должен быть удалён.
  2. Удалите текст, начиная с replacementStart() с длиной replacementLength() и замените его на commitString(). Если replacementLength() равно 0, replacementStart() задаёт позицию вставки для commitString().

    При замене область строки предварительного редактирования игнорируется, поэтому замена, начинающаяся с -1 с длиной 2, удалит последний символ перед строкой предварительного редактирования и первый символ после неё, и вставит строку подтверждения непосредственно перед строкой предварительного редактирования.

    Если виджет реализует отмену/повтор, эта операция добавляется в стек отмены/повтора.

  3. Если нет текущей строки предварительного редактирования, вставьте preeditString() в текущую позицию курсора; в противном случае замените предыдущую preeditString полученной в этом событии.

    Если виджет реализует отмену/повтор, preeditString() не должна влиять на стек отмены/повтора никоим образом.

    Виджет должен проверить список атрибутов, чтобы применить их к строке предварительного редактирования. Он должен понимать по крайней мере атрибуты TextFormat и Cursor и отображать их, как указано.

См. такжеQInputMethod.

Документация по типам членов

перечисление QInputMethodEvent::AttributeType

Константа Значение Описание
QInputMethodEvent::TextFormat 0 Форматирование символов в строке предварительного редактирования, определяемое заданными началом и длиной. значение содержит QVariant типа QTextFormat, определяя отображение части строки предварительного редактирования. Должно быть не более одного формата для каждой части строки предварительного редактирования. Если для любого символа в строке задано несколько форматов, поведение не определено. Соответствующая реализация должна по крайней мере учитывать свойства backgroundColor, textColor и fontUnderline формата.
QInputMethodEvent::Cursor 1 Если установлено, курсор должен быть показан внутри строки предварительного редактирования в позиции start. Переменная length определяет, виден ли курсор. Если length равно 0, курсор невидим. Если значение является QVariant типа QColor, этот цвет будет использоваться для отображения курсора, в противном случае будет использоваться цвет окружающего текста. Должен быть не более одного атрибута Cursor на событие. Если задано несколько, поведение не определено.
QInputMethodEvent::Language 2 Значение содержит объект QLocale, определяющий язык определенной части строки предварительного редактирования. Должен быть не более одного языка, заданного для каждой части строки предварительного редактирования. Если для любого символа в строке задано несколько, поведение не определено.
QInputMethodEvent::Ruby 3 Текст ruby для части строки предварительного редактирования. Должен быть не более одного текста ruby для каждой части строки предварительного редактирования. Если для любого символа в строке задано несколько, поведение не определено.
QInputMethodEvent::Selection 4 Если установлено, курсор редактирования должен быть перемещён в указанную позицию в содержании текста редактора. В отличие от Cursor, этот атрибут не работает со строкой предварительного редактирования, а с окружающим текстом. Курсор будет перемещён после подтверждения строки подтверждения, а строка предварительного редактирования будет расположена в новой позиции редактирования. Позиция старта определяет новую позицию, а переменная длины может быть использована для установки выделения, начиная с этой точки. Значение не используется.

См. такжеAttribute.

Документация функций-членов

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.1/qinputmethodevent.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API