Widget zur Eingabe von IPAdressen
Widget zur Eingabe von IPAdressen
Gibt es sowas irgendwo??
Natürlich könnte ich mir das auch irgendwie selber bauen, aber wenn es sowas schon irgendwo gibt....
Natürlich könnte ich mir das auch irgendwie selber bauen, aber wenn es sowas schon irgendwo gibt....
-
- Beiträge: 503
- Registriert: 29. Dezember 2006 22:54
- Wohnort: HL
hmm, die Beispiele habe ich Leider nicht mitkompiliert... werde ich dann wohl mal machen....
mit QLineEdit::inputMask geht das schon, das ist wahrscheinlich auch die beste Lösung... aber dann muss man den Wertebereich eingrenzen (0-254), dafür sorgen das man mit TAB richtig weiterspringt usw....
Das suche ich halt als fertiges Widget, das muss doch jemand haben....
mit QLineEdit::inputMask geht das schon, das ist wahrscheinlich auch die beste Lösung... aber dann muss man den Wertebereich eingrenzen (0-254), dafür sorgen das man mit TAB richtig weiterspringt usw....
Das suche ich halt als fertiges Widget, das muss doch jemand haben....
Hi,
Ich mache das hier so, Verbesserungsvorschläge willkommen.
.h:
.cpp:
cu, Bernd
Ich mache das hier so, Verbesserungsvorschläge willkommen.
.h:
Code: Alles auswählen
private:
QLineEdit *editIPAddress;
Code: Alles auswählen
// erlaubt eine IP-Adresse x.x.x.x
QRegExp rxIp("(([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\\.){3}([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])");
QValidator *valIP = new QRegExpValidator(rxIp, this);
QLabel *lblIPAddress = new QLabel(tr("IP address:"));
editIPAddress = new QLineEdit();
editIPAddress->setValidator(valIP);
lblIPAddress->setBuddy(editIPAddress);
Sorry aber ich bin zu doof für den Validator:
Ich kann immer noch alles eingeben, also auch 333.333.333.333! Oder kollidiert der Validator mit meiner InputMask die ich zusätzlich gesetzt habe?
Übrigens kann ich auch bei:
noch Zahlen größer 65536 und auch 0 eingeben!
Ich glaube ich hab da ein grundlegendes Problem, was die Validator betrifft, oder??
Code: Alles auswählen
QRegExp rxIp("(([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\\.){3}([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])");
hostLineEdit->setValidator(new QRegExpValidator(rxIp, this));
Übrigens kann ich auch bei:
Code: Alles auswählen
portLineEdit->setValidator(new QIntValidator(1, 65536, this));
Ich glaube ich hab da ein grundlegendes Problem, was die Validator betrifft, oder??
Ich hab mal ein kurzes Testprogramm erstellt:
So funktioniert es super, wenn ich allerdings das setInputMask direkt vor dem setValidator aufrufe geht überhaupt gar nix mehr!?!
Ich benutze Qt 4.3.1 !
Kann das jemand so bestätigen?
Code: Alles auswählen
#include <qapplication.h>
#include <QMainWindow>
#include <QLineEdit>
#include <QValidator>
int main( int argc, char **argv )
{
QApplication app( argc, argv );
QMainWindow test;
QLineEdit lineEdit(&test);
QRegExp rxIp("(([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\\.){3}([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])");
lineEdit.setValidator(new QRegExpValidator(rxIp, &test));
lineEdit.setInputMask("000.000.000.000; ");
test.show();
return app.exec();
}
Ich benutze Qt 4.3.1 !
Kann das jemand so bestätigen?
Hi,
Aber auch anders herum funktioniert das IMHO nicht richtig. Man kann nach wie vor Zahlen bis 999 eingeben.
Deshalb verzichte ich hier einfach auf die InputMask.
Bessere Alternativen?
cu, Bernd [using Qt 4.3.2]
teilweise. Auch hier funktioniert gar nichts mehr wenn man die InputMask vor dem Validator setzt.Kann das jemand so bestätigen?
Aber auch anders herum funktioniert das IMHO nicht richtig. Man kann nach wie vor Zahlen bis 999 eingeben.
Deshalb verzichte ich hier einfach auf die InputMask.
Bessere Alternativen?
cu, Bernd [using Qt 4.3.2]
Das liegt an der Expression. Eine angebliche richtige ist:bst hat geschrieben:Aber auch anders herum funktioniert das IMHO nicht richtig. Man kann nach wie vor Zahlen bis 999 eingeben.
"\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b"
Habe ich aber nicht getestet.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
Also Qt 4.3.2 bringt bei mir auch keine Besserung!
In der Online-Hilfe von Qt weißen sie extra noch darauf hin, das man z.B. für IP Adressen eine InputMask mit einem Validator kombinieren sollte/könnte.
Kann jemand einen Fehler am Code entdecken, schliesst sich die InputMask mit dieser ReqExp aus?
Ist es ein Bug in Qt?
In der Online-Hilfe von Qt weißen sie extra noch darauf hin, das man z.B. für IP Adressen eine InputMask mit einem Validator kombinieren sollte/könnte.
Kann jemand einen Fehler am Code entdecken, schliesst sich die InputMask mit dieser ReqExp aus?
Ist es ein Bug in Qt?
Code: Alles auswählen
QLineEdit *edit=new QLineEdit(0);
edit->show();
edit->setInputMask("000.000.000.000;0");
QRegExp rxIp("(([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\\.){3}([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])");
edit->setValidator(new QRegExpValidator(rxIp, edit));