是否可以限制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();
}
...
发布于 2021-10-21 21:50:07
使用信号/插槽机制和信号阻断器非常简单...
#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);
https://stackoverflow.com/questions/69664111
复制相似问题