2017-09-26 7 views
0

Je veux entrer le numéro de Hex avec QInputDialog, et il n'y a getInt, getDouble, getItem et getString. Seul le getSring peut prendre en char comme "a, b, c, d, e, f". Toutefois, est-il someway pour restreindre getString prendre seulement 0~9||"a-f"Comment limiter le contenu de QInputDialog :: getText

+0

Maintenant, je réalise mon dialogue personnalisé et utilisez RegExp pour limiter le contenu. –

+0

Voulez-vous renvoyer une chaîne ou un nombre? – eyllanesc

Répondre

1

QSpinBox sont widgets orientés pour obtenir des numéros de l'entrée du client, ce qui a pour procédé setDisplayIntegerBase() qui indique dans quelle base numérique, il est souhaitable d'utiliser, dans ce cas, il est nécessaire d'utiliser la base 16.

donc, si vous regardez la méthode getInt() a une QSpinBox interne alors seulement que la propriété doit être activé, il n'y a pas de méthode directe pour obtenir le QSpinBox, mais nous pouvons utiliser la méthode 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(); 
} 

Exemple:

#include <QApplication> 
#include <QDebug> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    qDebug()<<getHex(Q_NULLPTR, "title", "label", 0x1d, 0); 
    return 0; 
} 

Screenshot:

enter image description here

+0

C'est juste comme je le cherche. Merci pour toute l'aide que vous me donnez. –