Spec-Zone.ru › Qt 5.6

Класс QInputMethodEvent

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

Заголовок: #include <QInputMethodEvent>
qmake: QT += gui
Наследуется от: QEvent
  • Список всех членов, включая унаследованные

Общественные типы

класс Attribute
перечисление AttributeType { TextFormat, Cursor, Language, Ruby, Selection }

Общественные функции

QInputMethodEvent()
QInputMethodEvent(const QString &preeditText, const QList<Attribute> &attributes)
QInputMethodEvent(const QInputMethodEvent &other)
~QInputMethodEvent()
const QList<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)
  • 6 общественных функций унаследовано от QEvent

Дополнительные унаследованные члены

  • 1 свойство унаследовано от QEvent
  • 1 статический общественный член, унаследованный от QEvent

Подробное описание

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

События ввода отправляются виджетам, когда для ввода текста в виджет используется метод ввода. Методы ввода широко используются для ввода текста для языков с нелатинскими алфавитами.

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

См. также Атрибут.

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

QInputMethodEvent::QInputMethodEvent()

Создаёт событие типа QEvent::InputMethod. attributes(), preeditString(), commitString(), replacementStart() и replacementLength() инициализируются значениями по умолчанию.

См. также setCommitString().

QInputMethodEvent::QInputMethodEvent(const QString &preeditText, const QList<Attribute> &attributes)

Создаёт событие типа QEvent::InputMethod. Текст предварительного редактирования устанавливается в preeditText, атрибуты в attributes.

Значения commitString(), replacementStart() и replacementLength() могут быть установлены с помощью setCommitString().

См. также preeditString() и attributes().

QInputMethodEvent::QInputMethodEvent(const QInputMethodEvent &other)

Создаёт копию other.

QInputMethodEvent::~QInputMethodEvent()

Уничтожает экземпляр QInputMethodEvent.

const QList<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/archives/qt-5.6/qinputmethodevent.html

Spec-Zone.ru

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