2017-09-26 142 views
0

我想限制与QInputDialog,并且只有getIntgetDoublegetItemgetString。只有getSring可以采用像“a,b,c,d,e,f”这样的字符。然而,是否有某种方式来限制getString仅采取0~9||"a-f"如何QInputDialog的输入十六进制数字内容:: gettext的

+0

现在我知道我的自定义对话框,并使用正则表达式来限制内容。 –

+0

你想返回一个字符串或数字吗? – eyllanesc

回答

1

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

截图:

enter image description here

+0

这只是我正在寻找的方式。谢谢你给我的所有帮助。 –

相关问题