Как применить регулярное выражение к TextEdit, как в виджетах Qt?

Есть ли способ применить регулярное выражение (при вводе текста) к элементу TextEdit QML, как в QtWidgets?

В QtWidgets вам нужно создать QRegExp и QValidator, затем установить шаблон для QRegExp, создать QValidator с шаблоном и, наконец, вызвать setValidator() на QLineEdit.

Есть ли способ реализовать что-то подобное в QML? Или единственный способ обойти это — использовать код JavaScript и/или C++?


person user3417815    schedule 29.06.2015    source источник


Ответы (1)


Если вы хотите добавить проверку текста, вам следует переключиться с типа TextEdit на тип TextInput. Последний имеет свойство validator. Это читается из документации:

Позволяет установить валидатор для TextInput. Когда установлен валидатор, TextInput будет принимать только ввод, который оставляет свойство text в приемлемом или промежуточном состоянии. Принятый сигнал будет отправлен только в том случае, если текст находится в приемлемом состоянии, когда нажата клавиша ввода.

В настоящее время поддерживаются валидаторы IntValidator, DoubleValidator и RegExpValidator.

RegExpValidator предоставляет свойство regExp, которое содержит фактическое регулярное выражение для применяться к введенному тексту.

Вот минимальный пример, который принимает только цифры и a (одна или несколько цифр/a - как в верхнем, так и в нижнем регистре):

import QtQuick 2.4
import QtQuick.Window 2.2
import QtQuick.Controls 1.3

ApplicationWindow {
    id: window
    width: 200
    height: 200
    visible: true
    
    TextInput {
        focus: true
        anchors.centerIn: parent
        validator: RegExpValidator { regExp: /[0-9aA]+/ }
    }
}
person BaCaRoZzo    schedule 29.06.2015