非常抱歉,前面给出的代码在设置了QIntValidator后仍然允许输入超过100的值是有问题的。这是因为默认情况下,QLineEdit不会对输入进行严格验证。
要实现严格的验证,可以通过重写QLineEdit的inputMethodEvent
方法来实现。以下是一个修正后的示例代码:
#include <QApplication>
#include <QLineEdit>
#include <QIntValidator>
#include <QDebug>
class RestrictedLineEdit : public QLineEdit
{
public:
RestrictedLineEdit(QWidget *parent = nullptr)
: QLineEdit(parent)
{
setValidator(new QIntValidator(0, 100, this));
}
protected:
void inputMethodEvent(QInputMethodEvent *event) override
{
QString newText = event->commitString();
int pos = 0;
if (validator() && validator()->validate(newText, pos) != QValidator::Acceptable) {
qWarning() << "Invalid input";
return;
}
QLineEdit::inputMethodEvent(event);
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
RestrictedLineEdit lineEdit;
lineEdit.show();
return a.exec();
}
在这个修正后的代码中,我们创建了一个自定义类RestrictedLineEdit继承自QLineEdit,并重写了inputMethodEvent方法。在该方法中,我们获取用户输入并使用设定的validator进行验证。如果输入不符合验证规则,则会打印警告信息并禁止接受该输入。
希望这次能够满足你的需求!请测试一下,并随时向我提问。
内容由零声教学AI助手提供,问题来源于学员提问