是否可以限制QInputDialog::getText
的长度?例如,我想在InputDialog中直接将用户输入的长度限制为10个字符。遗憾的是,没有QInputDialog::setMaximum
这样的函数。
下面是我当前的代码:
QString input = QInputDialog::getText(this, tr("Find"), tr("Enter text:"), QLineEdit::Normal, "", nullptr, Qt::WindowFlags(), Qt::ImhDialableCharactersOnly);
if (input == "")
return;
else if (input.length() > 10)
{
QMessageBox::warning(this, tr("Invalid input", "Note #1"), tr("Input is too long."));
// This is this function name (calls itself again)
on_actionFind_triggered();
}
...
使用信号/插槽机制和信号阻塞器非常容易…
#include <QApplication>
#include <QInputDialog>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QInputDialog w;
QObject::connect(&w, &QInputDialog::textValueChanged,
[&w](QString text){ if (text.length() > 10) { QSignalBlocker s(w); w.setTextValue(text.left(10)); } });
w.show();
return a.exec();
}
另一种可能性是找到对话框的QLineEdit
子,然后分配一个特定的QValidator
给它。我还没有测试过,但它应该也能工作。但是,您需要编写最大长度验证器。
auto lineEdit = inputDialog->findChild<QLineEdit*>();
lineEdit->setValidator(validator);