Spec-Zone.ru › Qt 6.0

Класс 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, удалит последний символ перед строкой предварительного редактирования и первый символ после неё, и вставит строку commit непосредственно перед строкой предварительного редактирования.

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

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

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

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

См. также QInputMethod.

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

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

Константа Значение Описание
QInputMethodEvent::TextFormat 0 QTextCharFormat для части строки предварительного редактирования, заданной началом и длиной. value содержит QVariant типа QTextFormat, определяющего отображение этой части строки предварительного редактирования. Должен быть не более одного форматирования для каждой части строки предварительного редактирования. Если для любого символа в строке указано несколько форматов, поведение не определено. Соответствующая реализация должна по крайней мере учитывать свойства backgroundColor, textColor и fontUnderline формата.
QInputMethodEvent::Cursor 1 Если установлено, курсор должен быть показан внутри строки предварительного редактирования в позиции start. Переменная length определяет, виден ли курсор. Если длина равна 0, курсор невидим. Если value является 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.0/qinputmethodevent.html

Spec-Zone.ru

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