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
QTextEdit: Unterscheidung Soft-/Hardreturn
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
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().
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().
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Das Problem ist, daß garnicht zwischen SHIFT+RETURN oder nur RETURN unterschieden wird.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().
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*);
};
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);
}
"<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
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Warum so umständlich?
So bekommt QTextEdit nichts davon mit und fügt nichts ein.
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);
}
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Also, funktionieren tut es einwandfrei.Christian81 hat geschrieben:Warum so umständlich?
So bekommt QTextEdit nichts davon mit und fügt nichts ein.
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
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
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.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung