我想用 输入十六进制数QInputDialog
,只有getInt
, getDouble
,getItem
和getString
。只有getSring
可以接受像“a,b,c,d,e,f”这样的字符。但是,有没有办法限制getString
只取0~9||"a-f"
问问题
1572 次
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 回答