0

是否可以限制 a 的长度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();
    }
...
4

1 回答 1

0

使用信号/插槽机制和信号拦截器非常容易......

#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);
于 2021-10-21T21:50:06.740 回答