如何设置QInputDialog文本的最大长度



是否可以限制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);

相关内容

  • 没有找到相关文章

最新更新