Seite 1 von 1
QTextEdit: Unterscheidung Soft-/Hardreturn
Verfasst: 28. August 2006 14:36
von gerome69
Hallo,
ich hätte gerne in einem QTextEdit ENTER (soll zu "</p><p>" werden, ist ok) und SHIFT+ENTER(soll zu "<br />" werden) eingeben können.
Per Default scheint er da nicht zu unterscheiden und baut immer "</p><p>" ein, egal ob mit oder ohne SHIFT-Taste.
Ich habe versucht das Signal returnPressed() abzufangen und dann sowas versucht:
void QTextEditGUI::returnPressed() {
textEdit->insert("<br>");
}
[Müßte eh erweitert werden auf Prüfung von SHIFT-Taste und Entfernen des "</p><p>"].
Dann schreibt er mir aber halt "<br>" im Klartext hin. Als Tag kriege ich das nicht eingefügt.
Kann mir jemand nen Tip geben, wie das zu machen ist?
Vielen Dank, Gérôme
Verfasst: 28. August 2006 16:11
von Christian81
Ich glaube das geht nur über diesen Umweg:
http://doc.trolltech.com/3.3/qtextedit.html#text-prop
Also erst alles als html abholen, dein <br> hinzufügen und wieder setzen. Es kann ja auch sein dass Du wirklich <br> schreiben willst, also kann insert gar nicht gehen. Deswegen gibts in Qt4 dann auch setText() und setHTML().
Verfasst: 29. August 2006 11:56
von gerome69
Christian81 hat geschrieben:
Also erst alles als html abholen, dein <br> hinzufügen und wieder setzen. Es kann ja auch sein dass Du wirklich <br> schreiben willst, also kann insert gar nicht gehen. Deswegen gibts in Qt4 dann auch setText() und setHTML().
Das Problem ist, daß garnicht zwischen SHIFT+RETURN oder nur RETURN unterschieden wird.
Ich habe es jetzt wie folgt gelöst (QT 4.1):
- abgeleitete Klasse von QTextEdit:
Code: Alles auswählen
class MyTextEdit:public QTextEdit {
Q_OBJECT
protected: void keyPressEvent(QKeyEvent*);
};
Dann implementiert:
Code: Alles auswählen
void MyTextEdit::keyPressEvent(QKeyEvent* e) {
if ((e->modifiers()==Qt::ShiftModifier) &&
((e->key()==Qt::Key_Return)||(e->key()==Qt::Key_Enter))
) this->insertHtml("<br />");
QTextEdit::keyPressEvent(e);
}
Dann steht allerdings hinterher im HTML:
"<br /></p><p>"
Und das jage ich beim Rausspeichern des HTML halt einfach durch ein
.replace("<br /></p><p>","<br />");
Voilá.
Ganz schöner Kampf, aber es geht.
Gruß, Gérôme
Verfasst: 29. August 2006 12:00
von Christian81
Warum so umständlich?
Code: Alles auswählen
void MyTextEdit::keyPressEvent(QKeyEvent* e) {
if ((e->modifiers()==Qt::ShiftModifier) &&
((e->key()==Qt::Key_Return)||(e->key()==Qt::Key_Enter))) {
this->insertHtml("<br />");
return;
}
QTextEdit::keyPressEvent(e);
}
So bekommt QTextEdit nichts davon mit und fügt nichts ein.
Verfasst: 29. August 2006 12:25
von gerome69
Christian81 hat geschrieben:Warum so umständlich?
So bekommt QTextEdit nichts davon mit und fügt nichts ein.
Also, funktionieren tut es einwandfrei.
Umständlich? Ja, finde ich auch.
Aber hast du nen besseren Vorschlag, wie ich ENTER und SHIFT+ENTER unterschiedlich handeln kann?
Bei deiner Lösung ist das Problem, daß dann eben kein Zeilenumbruch im Editor-Fenster erzeugt wird und der Cursor einfach an der alten Stelle stehen bleibt. Das ist für den Benutzer sicher höchst verwirrend.
Ein insertHTML("<br />\n") hat leider den Cursor auch nicht in die nächste Zeile bewegt
Gruß, Gérôme
Verfasst: 29. August 2006 12:31
von Christian81
Evtl. danach mit
http://doc.trolltech.com/4.1/qtextedit.html#textCursor denj Cursor ans Ende des Dokuments setzen? bzw. eben ein paar Zeichen weiter als die jetzige Position.