0

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

4

1 回答 1

1

QSpinBox是面向从客户端输入获取数字的小部件,它具有setDisplayIntegerBase()指示希望使用哪个数字基数的方法,在这种情况下,必须使用基数 16。

因此,如果您查看该方法getInt()有一个 internalQSpinBox那么只有该属性应该被启用,没有直接的方法来获取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;
}

截屏:

在此处输入图像描述

于 2017-09-26T04:14:58.500 回答