Я хочу ввести шестнадцатеричный номер с QInputDialog
и есть только getInt
, getDouble
, getItem
а также getString
, Только getSring
может принимать в char как «a, b, c, d, e, f». Тем не менее, есть ли возможность ограничить getString
только взять 0~9||"a-f"
QSpinBox
виджеты ориентированы на получение чисел из клиентского ввода, это имеет метод 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;
}
Скриншот:
Других решений пока нет …