Как ограничить содержимое QInputDialog :: getText

Я хочу ввести шестнадцатеричный номер с QInputDialogи есть только getInt, getDouble, getItem а также getString, Только getSring может принимать в char как «a, b, c, d, e, f». Тем не менее, есть ли возможность ограничить getString только взять 0~9||"a-f"

0

Решение

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;
}

Скриншот:

введите описание изображения здесь

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]