Qt 在用于ints的linedit中包含间隔

Qt 在用于ints的linedit中包含间隔,qt,qlineedit,Qt,Qlineedit,我使用了一个lineEdit,用户可以输入频率间隔 // Making the lineedit objects only accept numbers and align it leftside ui->frequency->setValidator(new QIntValidator(36, 1000, this)); ui->frequency->setAlignment(Qt::AlignRight); 它可以正常工作到上限1000,但下限dos不能。所以我创建

我使用了一个lineEdit,用户可以输入频率间隔

// Making the lineedit objects only accept numbers and align it leftside
ui->frequency->setValidator(new QIntValidator(36, 1000, this));
ui->frequency->setAlignment(Qt::AlignRight);
它可以正常工作到上限1000,但下限dos不能。所以我创建了一个槽来控制它

// Control freqeuncy interval
void gui::f_interval()
{
    QString f = ui->frequency->text();
    freq = f.toInt();

    if (freq < 36)
    {
        int status = QMessageBox::warning(this,"Warning","Invalid frequency interval",QMessageBox::Ok);
    }
}
因此,当用户输入一个小于36的数字时,就会出现一个警告对话框窗口

但它似乎不起作用。有人能帮我吗?

您想用信号连接,而不是编辑完成


LE:我也不记得验证器有问题,所以你能提供更多细节吗,比如Qt版本、操作系统版本、编译器,也许可以看看这个问题是否在一个示例项目中重现。

如果我使用文本更改,它将不会产生我想要的效果。想象一下我想要300。如果我把300中的前3个放进去,它会告诉我警告对话框,因为3低于36QT 4.8.1,ubuntu 12.04 LTS x86是的,你是对的。问题是,实际上较低的数字在验证器中处于中间状态,因此您可以检查验证器的状态,也可能需要更改焦点(以查看用户是否将焦点更改为线编辑之外)。或者简单的方法是使用一个实际上是为了获取数字作为输入而构建的,具有最小值和最大值的。您能给出一些关于使用
void QApplication::focusChanged(QWidget*旧,QWidget*现在)
的详细信息吗?
// Control frequency interval
connect(ui->frequency, SIGNAL(editingFinished()), this, SLOT(f_interval()));