[Re-ReOpened) Easy input mask
-
Hello everyone, I tryed to make a input mask kind "02-03-21".
I searched on internet, but all examples are dificult for the first step.That is my idea, but don't works
ui->lineEdit->setInputMask("nnn;");
ui->lineEdit->setCursorPosition(0);I would appreciate some help.
Greetings
-
hi
is that a date u want to have mask for ? -
Hi! QDateEdit is your friend ;-)
-
Hi you must define your input using the below symbols.
"9999:9999/999 999 - 9999" for "0000 : 000 /234 1230 - 1234"
But might need to use N also etc.
So first you should think about what your format really is. the rules
of it.Character Meaning A ASCII alphabetic character required. A-Z, a-z. a ASCII alphabetic character permitted but not required. N ASCII alphanumeric character required. A-Z, a-z, 0-9. n ASCII alphanumeric character permitted but not required. X Any character required. x Any character permitted but not required. 9 ASCII digit required. 0-9. 0 ASCII digit permitted but not required. D ASCII digit required. 1-9. d ASCII digit permitted but not required (1-9). # ASCII digit or plus/minus sign permitted but not required. H Hexadecimal character required. A-F, a-f, 0-9. h Hexadecimal character permitted but not required. B Binary character required. 0-1. b Binary character permitted but not required. > All following alphabetic characters are uppercased. < All following alphabetic characters are lowercased. ! Switch off case conversion. \ Use \ to escape the special characters listed above to use them as separators.
-
you can use a QRegularExpressionValidator
ui->lineEdit->setValidator( new QRegularExpressionValidator( QRegularExpression( // put here the regular expression that matches the valid input ) ,ui->lineEdit ) );
-
...or as suggested by @VRonin :
const QString a4 = "[0-9A-Za-Z]{4}"; const QString a3 = "[0-9A-Za-Z]{3}"; const QString expression = QString("%1\\s\\:\\s%1\\s\\/%2\\s%2\\s\\-\\s%1").arg(a4).arg(a3); QRegExp rx(expression); QValidator *validator = new QRegExpValidator(rx, this); ui->lineEdit->setValidator(validator);
-
@Wieland QRegExp should be banished from new code. The only place I still use it over QRegularExpression is QSortFilterProxyModel::filterRegExp just because I don't have a choice. see http://doc.qt.io/qt-5/qregularexpression.html#notes-for-qregexp-users
@yczo you might be interested in: http://www.bogotobogo.com/cplusplus/files/c-gui-programming-with-qt-4-2ndedition.pdf
-
hello un thank you, A question more...
But with this code some fails. I can only the first validator a4 write, a3 don't work. The expresion dont work, only a4. Why might it be?
/ const QString a4 = "[0-9A-Za-Z]{4}"; const QString a3 = "[0-9A-Za-Z]{3}"; const QString expression = QString("%1\\s\\:\\s%1\\s\\/%2\\s%2\\s\\-\\s%1").arg(a4).arg(a3); QRegExp rx(expression); QValidator *validator = new QRegExpValidator(rx, this); ui->lineEdit->setValidator(validator); /your code here
Thanks in advance
-
Upssss....thank you very much, as could not see the extra characters, like in ui->lineEdit->setInputMask("NNN:NNNN /NNN NNN - NNNN;X");
is there a way to merge both? Because
ui->setupUi(this); // ui->lineEdit->inputMask ; // ui->getLine->setMaxLength(sizeMSG); // ui->lineEdit->setInputMask("nnn;A"); // ui->lineEdit->setInputMask("nnn;"); // ui->lineEdit->adjustSize(); ui->lineEdit->setInputMask("NNN:NNN/NNN;X"); const QString a0 = "[0-9A-Za-Z]{3}"; const QString a1 = "[0-9A-Za-Z]{3}"; const QString a2 = "[0-9A-Za-Z]{3}"; const QString expression = QString("%1\\:\\%2\\/\\%3").arg(a0).arg(a1).arg(a2); //ui->lineEdit->setCursorPosition(0); // const QString a4 = "[0-9A-Za-Z]{4}"; // const QString a3 = "[0-9A-Za-Z]{3}"; // const QString expression = QString("%1\\s\\:\\s%1\\s\\/%2\\s%2\\s\\-\\s%1").arg(a4).arg(a3); QRegExp rx(expression); QValidator *validator = new QRegExpValidator(rx, this); ui->lineEdit->setValidator(validator); ui->lineEdit->setFixedWidth(600); ui->lineEdit->setCursorPosition(0);
don't works.
Greetings
-
@yczo said:
is there a way to merge both?
Yes, just make the parts of the input optional, like this:
ui->setupUi(this); ui->lineEdit->setInputMask("NNN : NNN"); const QString a0 = "[ 0-9A-Za-z]{3}"; // space before 0 const QString space = "\\s"; const QString colon = "\\:"; const QString expression = QString("%1%2%3%2%1").arg(a0).arg(space).arg(colon); QRegExp rx(expression); QValidator *validator = new QRegExpValidator(rx, this); ui->lineEdit->setValidator(validator);
-
Please, can you show me how to make it? Because I tried several options but, I have not luck.
That is my idea
ui->leStr->setInputMask("A99"); //el conjunto para tanto espacios const QString id ="[ (A,M,O)]{1}"; //espacio delante para poder editar const QString cm ="[ 0-9]{2}"; //const QString sl ="[0-50]{2}"; const QString expr = QString("%1%2").arg(id).arg(cm); QRegExp cmp(expr); QValidator *vld = new QRegExpValidator(cmp,this); ui->leStr->setValidator(vld); ui->leStr->setCursorPosition(0);
-
That is another idea, but don't work too
ui->le1->setInputMask("99"); ui->le1->setValidator(new QDoubleValidator(01,10,1,this)); ui->le1->setCursorPosition(0);
or
ui->le1->setInputMask("99"); ui->le1->setValidator(new QIntValidator(1,10,this)); ui->le1->setCursorPosition(0);
i don't understand what I make wrong,
Greetings
Edit---
ok i discovered that,ui->le1->setValidator(new QIntValidator(1,10,this));
work good for integers, but, only in a separate field. how to make all together, that is another story und not idea XDD