如何限制QInputDialog::getText的内容

How to restrict the content of QInputDialog::getText

我想用QInputDialog输入十六进制数,结果只有getIntgetDoublegetItemgetString。只有 getSring 可以像 "a,b,c,d,e,f" 一样接受字符。但是,有没有办法限制getString只取0~9||"a-f"

QSpinBox are widgets oriented to obtain numbers from the client input, this has the method setDisplayIntegerBase()表示希望使用哪种基数,在这种情况下需要使用基数16。

所以如果你查看方法 getInt() 有一个内部 QSpinBox 那么只有那个 属性 应该被启用,没有直接的方法来获取 QSpinBox , 但我们可以使用 findchild() 方法。

#include <QInputDialog>
#include <QSpinBox>

static QString getHex(QWidget *parent,
                      const QString &title,
                      const QString &label,
                      int value = 0,
                      int min = -2147483647,
                      int max = 2147483647,
                      int step = 1,
                      bool *ok = Q_NULLPTR,
                      Qt::WindowFlags flags = Qt::WindowFlags()){
    QInputDialog dialog(parent, flags);
    dialog.setWindowTitle(title);
    dialog.setLabelText(label);
    dialog.setIntRange(min, max);
    dialog.setIntValue(value);
    dialog.setIntStep(step);
    QSpinBox *spinbox = dialog.findChild<QSpinBox*>();
    spinbox->setDisplayIntegerBase(16);

    bool ret = dialog.exec() == QDialog::Accepted;
    if (ok)
        *ok = ret;
    return spinbox->text();
}

示例:

#include <QApplication>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    qDebug()<<getHex(Q_NULLPTR, "title", "label", 0x1d, 0);
    return 0;
}

截图: