QIntValidator возвращает Intermediate в допустимом вводе - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть QIntValidator(int min, int max, QWidget* parent) настройка, но она возвращает QValidator::Intermediate с входами, которые находятся между минимальным и максимальным (т.е. действительным).

Я использую этот QIntValidator, чтобы проверить, является ли вход,целое число между минимальным и максимальным стабильным.Если нет, ввод отбрасывается, возвращая редактору прежнее значение.

Представьте, что минимальное значение равно 1, а максимальное - 2147483648. Если пользователь вводит, например, число 3, он возвращает QValidator.:: Intermediate.Это похоже на странное поведение.Есть идеи, почему это происходит?

QLineEdit *lnEdt = reinterpret_cast<QLineEdit*>(item);
QString valData = lnEdt->text(); // "3"
int nRow = ui->listWidget->currentRow();

if(editor == QVariant::Int) //the type of input, in this case, it's true
{
    qDebug() << minimum; //1
    qDebug() << maximum; //2147483648
    QValidator *validator = new QIntValidator(minimum.toInt(), maximum.toInt());
    int pos = 0;
    qDebug() << validator->validate(valData, pos); // QValidator::Intermediate
    if(validator->validate(valData, pos) != QValidator::Acceptable)
    //it falls in this condition, rejecting the input 
    //and setting the editor text to its previous value.
        ui->listWidget->item(nRow)->setText(currentSelectedValue);
}

1 Ответ

0 голосов
/ 04 февраля 2019

http://doc.qt.io/qt-5/qintvalidator.html говорит о том, что это предполагаемое поведение (длина ввода меньше длины максимума).

...