如何限制QInputDialog :: getText的内容

时间:2017-09-26 02:05:18

标签: c++ qt qt5 qdialog qinputdialog

我想用QInputDialog输入十六进制数字,而且只有getIntgetDoublegetItemgetString。只有getSring可以接受像“a,b,c,d,e,f”这样的字符。但是,有人限制getString仅限0~9||"a-f"

1 个答案:

答案 0 :(得分:1)

QSpinBox是面向从客户端输入获取数字的小部件,其方法setDisplayIntegerBase()表示希望使用哪个数字库,在这种情况下需要使用base 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;
}

截图:

enter image description here