我想用QInputDialog
输入十六进制数字,而且只有getInt
,getDouble
,getItem
和getString
。只有getSring
可以接受像“a,b,c,d,e,f”这样的字符。但是,有人限制getString
仅限0~9||"a-f"
答案 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;
}
截图: