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
A
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:
+0
C'est juste comme je le cherche. Merci pour toute l'aide que vous me donnez. –
Maintenant, je réalise mon dialogue personnalisé et utilisez RegExp pour limiter le contenu. –
Voulez-vous renvoyer une chaîne ou un nombre? – eyllanesc