如何限制QInputDialog::getText的内容
How to restrict the content of QInputDialog::getText
我想用QInputDialog
输入十六进制数,结果只有getInt
、getDouble
、getItem
和getString
。只有 getSring
可以像 "a,b,c,d,e,f" 一样接受字符。但是,有没有办法限制getString
只取0~9||"a-f"
QSpinBox
are widgets oriented to obtain numbers from the client input, this has the method 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;
}
截图:
我想用QInputDialog
输入十六进制数,结果只有getInt
、getDouble
、getItem
和getString
。只有 getSring
可以像 "a,b,c,d,e,f" 一样接受字符。但是,有没有办法限制getString
只取0~9||"a-f"
QSpinBox
are widgets oriented to obtain numbers from the client input, this has the method 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;
}
截图: