Seite 1 von 2

Widget zur Eingabe von IPAdressen

Verfasst: 4. November 2007 13:12
von ML1982
Gibt es sowas irgendwo??
Natürlich könnte ich mir das auch irgendwie selber bauen, aber wenn es sowas schon irgendwo gibt....

Verfasst: 4. November 2007 14:50
von -=Freaky=-
kann sein dass ich mich taeusche, aber ich meine, bei irgendeinem example war sowas mit bei, da waren glaub ich einige lineEdits in einem fenster, jeweils mit verschiedenen input-masken.
guck mal im examples-verzeichnis v. deiner qt instalation nach.

mfg,
julian

Verfasst: 4. November 2007 15:25
von flossi
Schau Dir mal QLineEdit::inputMask an.

Sven

Verfasst: 6. November 2007 09:33
von ML1982
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....

Verfasst: 6. November 2007 12:25
von upsala
Du brauchst die InputMask und einen Validator. Einen Testcode würde man auf 10min erstellen, kann also doch nicht so wichtig sein...

Verfasst: 6. November 2007 13:55
von bst
Hi,

Ich mache das hier so, Verbesserungsvorschläge willkommen.

.h:

Code: Alles auswählen

private:
QLineEdit *editIPAddress;
.cpp:

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);
cu, Bernd

Verfasst: 8. November 2007 16:58
von iaby
Sorry aber ich bin zu doof für den Validator:

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));
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:

Code: Alles auswählen

portLineEdit->setValidator(new QIntValidator(1, 65536, this));
noch Zahlen größer 65536 und auch 0 eingeben!

Ich glaube ich hab da ein grundlegendes Problem, was die Validator betrifft, oder??

Verfasst: 8. November 2007 19:26
von upsala
Also der RegEx-Validator zusammen mit der Input-Mask funktioniert hier wie erwartet.

Verfasst: 8. November 2007 20:10
von iaby
Ich hab mal ein kurzes Testprogramm erstellt:

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();
}
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?

Verfasst: 9. November 2007 11:30
von bst
Hi,
Kann das jemand so bestätigen?
teilweise. Auch hier funktioniert gar nichts mehr wenn man die InputMask vor dem Validator setzt.

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]

Verfasst: 9. November 2007 12:20
von upsala
Mit 4.3.0 konnte ich keine Problem in dieser Richtung feststellen.

Verfasst: 9. November 2007 12:21
von macman
bst hat geschrieben:Aber auch anders herum funktioniert das IMHO nicht richtig. Man kann nach wie vor Zahlen bis 999 eingeben.
Das liegt an der Expression. Eine angebliche richtige ist:
"\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.

Verfasst: 9. November 2007 15:08
von bst
Hi,
Das liegt an der Expression
Nein. Ohne InputMask lassen sich nur Zahlen zwischen 0 und 255 eingeben.

cu, Bernd

Verfasst: 10. November 2007 09:20
von iaby
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?

Verfasst: 10. November 2007 12:17
von upsala

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)); 
Gerade eben mit Qt4.4 getestet und funktioniert auch wie erwartet...