QTextEdit fetten text einfuegen - kleines problem
-
hallo,
ich versuche, den markierten text in einem QTextEdit bei klick auf einen button fett erscheinen zu lassen.
momentan sieht meine funktion dazu so aus:void MainWindow::boldText() { QTextCursor textCursor = textEdit->textCursor(); if( textCursor.hasSelection() ) { QString selectedText = textCursor.selectedText(); textCursor.removeSelectedText(); textEdit->insertHtml( tr( "<b>%1</b>" ).arg( selectedText ) ); } }
es funktioniert soweit, dass der markierte text fett wird, aber wenn man direkt an den gerade "fett gewordenen" text weitere zeichen haengt, also z.B. einfach
weitertippt, sind diese ebenfalls fett, was nicht sein soll.dasselbe passiert uebrigens bei diesem ansatz
void MainWindow::boldText() { QTextCursor textCursor = textEdit->textCursor(); if( textCursor.hasSelection() ) { QString selectedText = textCursor.selectedText(); textCursor.removeSelectedText(); QTextCharFormat format; format.setFontWeight( QFont::Bold ); textCursor->insertText( selectedText, format )); } }
// edit: und hierbei dasselbe:
void MainWindow::boldText() { QTextCursor textCursor = textEdit->textCursor(); if( textCursor.hasSelection() ) { QTextCharFormat format; format.setFontWeight( QFont::Bold ); textCursor->setCharFormat( format ); } }
ich konnte im assistant keinen hinweis zu diesem verhalten finden und auch nicht per google-suche, wobei mir hier aber auch die richtigen zauberworte fehlen.
ich hoffe, das problem ist verstaendlich, wenn nicht bitte nachfragen!
bin dankbar fuer jeden hinweis/vorschlag/ansatz.
mfg,
julian
-
das ist normal, denn der Cursor übernimmt das Format des letzten Zeichens davor.
Wenn du das so nicht willst, füg noch ein Zeichen mit anderer Formatierung ein.
-
vielen dank fuer die antwort.
das habe ich mir gedacht und momentan mche ich es so, dass ein leerzeichen mit "standard"-foramtierung (nicht fett/kursiv/unterstrichen/...) angehaengt wird.
ich dachte es gibt vllt. nen workaround.nagut, da muss ich dann mit leben, und da das tool in erster linie fuer den eigengebrauch sein wird, ist das akzeptabel.
mfg,
julian
-
du kannst auch machen: du setzt inen flag, und wenn dann nach der formatierung wieder getippt wird, fängst du das signal und formatierst das zuletzt eingefügte zeichen wieder normal. Der User sollte davon eig nix merken...
-
daran hatte ich auch kurz gedacht, allerdings weiss ich immernoch nicht, wie ich das letzte eingegebene zeichen bekomme. ich hatte versucht, den cursor eine position nach links zu schieben, dann die formatierung zu aendern und anschliessen wieder eine position nach rechts zu schieben, allerdings wird dann auch der ehemals fette text "reformatiert".
kann mir da vllt. jemand einen tipp geben?
mfg,
julian