Seite 1 von 2
QTextEdit bzw. QString in ASCII7
Verfasst: 16. Juli 2007 14:44
von lefrosch
Hallo,
ich habe ein textedit-Feld und möchte nur Eingaben aus dem ASCII 7 Zeichensatz erlauben.
Da der Validator nur beim LineEdit funktioniert, muss ich das irgendwie anders schaffen. Ich habe schon versucht bei jeder Eingabe den Text in einen String zu schreiben und dort zu überprüfen.
Vielleicht hat jemand ne Lösung, wäre super...
Verfasst: 16. Juli 2007 15:08
von Christian81
Signal textChanged() abfangen und den Text auswerten.
Verfasst: 16. Juli 2007 15:15
von lefrosch
danke. abgefangen hab ich das schon. aber wie werte ich den text aus.
Verfasst: 16. Juli 2007 15:17
von Christian81
Solange du nur plainTexst erlaubst sollte es doch kein Problem sein.
Alle Zeichen durchgehen und schauen ob der char ascii ist oder nicht. Wobei das wohl performancemässig noch etwas optimiert werden müsste (nur den neuen Text durchsuchen wenn möglich)
Re: QTextEdit bzw. QString in ASCII7
Verfasst: 16. Juli 2007 15:26
von macman
lefrosch hat geschrieben:ich habe ein textedit-Feld und möchte nur Eingaben aus dem ASCII 7 Zeichensatz erlauben.
Ich würde den keyPressEvent überschreiben und so nur bestimmte Zeichen erlauben. Meiner Meinung nach der einzige gangbare Weg, bei allem anderen hast Du sonst schon unerwünschte Zeichen im String und müßtest sie wieder löschen.
Verfasst: 16. Juli 2007 15:29
von lefrosch
hmm, also alles in eine liste oder wie?
ich check jetzt langsam garnichts mehr oder ich sitz voll auf dem schlauch.
kann ich mit regexp nicht irgendwie alle nichtzutreffenden chars löschen?
ich will ja nur folgende zeichen zur eingabe ermöglichen, ascii 7 halt...
!"#$%&'()*+,-./0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
`abcdefghijklmnopqrstuvwxyz{|}~
@macman: aber wenn man per c&p einfügt, hab ich das doch auch wieder umgangen.
Verfasst: 16. Juli 2007 15:38
von Christian81
Ascii-7 ist alles unter 128, also was ist so schwer den ascii-Wert eines Zeichens auf < 128 zu prüfen?
Verfasst: 16. Juli 2007 15:54
von lefrosch
sorry, aber ich bin glaub zu blöd.
ich habe weise den inhalt meines feldes einem string zu:
QString text = ui.textEdit->toPlainText();
und dann? wie überprüfe ich jedes einzelne zeichen? der string kann bis zu 100 zeichen lang sein.
sorry der dummen fragen, aber ich bin halt noch nicht lang dabei...
Verfasst: 16. Juli 2007 15:59
von Christian81
Verfasst: 16. Juli 2007 16:11
von lefrosch
ohohoh, da hätte ich ja auch draufkommen können.
DANKE
aber mit dem vergleichen hab ich noch so meine probs:
Code: Alles auswählen
QString text = ui.textEdit->toPlainText();
for( int i=0; i<text.length()-1; i++ ) {
if( text.at(i).toAscii()>127 ) {
text.remove(i,1);
}
}
irgendwie mag das so nicht.
Verfasst: 16. Juli 2007 16:14
von Christian81
Mag nicht ist ne sehr schlechte Ausssage...
Es ist ausserdem sinnvoll von hinten anzufangen da Du Dir sonst ggf. einen crash einfängst.
Code: Alles auswählen
QString text = ui.textEdit->toPlainText();
for( int i=text.length()-1; i>=0; --i ) {
if( text.at(i).toAscii()>127 ) {
text.remove(i,1);
}
}
Verfasst: 16. Juli 2007 16:20
von lefrosch
danke. warum kann es zu einem crash kommen, wenn ich von vorne anfange?
mag nicht heisst soviel wie, dass er mir zB Umlaute nicht entfernt. Liegt das an dem toplaintext? oder an dem toascii? dort gibts doch nur 7 bit. in der qt doku steht aber was von 8bit?
Verfasst: 16. Juli 2007 16:26
von Christian81
lefrosch hat geschrieben:danke. warum kann es zu einem crash kommen, wenn ich von vorne anfange?
Ok, in diesem Fall kein Crash sondern ggf. das nicht-Löschen von einigen non-ASCII-7 chars.
i = 5
and 5. und 6. Stelle ist ein non-Ascii.
Du löscht das 5, Position 6 wird die neue Position 5, die for-Schleife zählt eins hoch und i = 6 ...

Verfasst: 16. Juli 2007 16:38
von lefrosch
kann das sein, dass toascii nicht funktioniert?
//gibt mir immer den eingegebenen buchstaben aus und nicht den asciiwert.
Verfasst: 16. Juli 2007 16:46
von upsala
Kann es sein, daß die Doku zu QChar.:toAscii() nicht gelesen hast?