0

我有一个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);
}
4

1 回答 1

2

http://doc.qt.io/qt-5/qintvalidator.html说这是预期的行为(输入的长度小于最大值的长度)。

于 2019-02-04T14:35:26.780 回答