Seite 1 von 1
[gelöst] Hintergrundfarbe im QTextEdit
Verfasst: 13. September 2007 20:31
von Stefan Majewsky
Hallo miteinander. Ich möchte eine Texteditorkomponente (auf Basis von QTextEdit) erstellen, wobei einzelne Teile des Textes mit einer Hintergrundfarbe hinterlegt werden sollen. (Die Vordergrundfarbe ist für Syntax-Highlighting reserviert.)
Ich habe ein bisschen mit QTextEdit::ExtraSelection experimentiert, aber damit ist erstens die Auswahlgenauigkeit nur wortweise (ich brauche zeichenweise), und zweitens gibt es keine Hintergrundfarbe. Dann hatte ich
Code: Alles auswählen
document()->setHtml("Dies ist <span style=\"background-color:red\">ein</span> Test.");
probiert, aber da wird auch innerhalb von "ein" eingegebener Text rot. Ich bräuchte eine Möglichkeit, einen Text einmal mit einer bestimmten Hintergrundfarbe zu versehen, wobei neu eingegebener Text immer ohne diese Farbe erscheint. Gibt es da etwas Vorgefertigtes? Danke im Voraus für Hinweise.
Verfasst: 19. September 2007 11:23
von FlorianBecker
Das scheint ein ziemlich schwieriges Problem zu sein. Ich denke, es wird nicht einfach mal eben so lösbar sein.
Da du ja einen Editor schreiben möchtest würde ich dir vorschlagen, so etwas selbst zu lösen und eben von Grund auf neu zu programmieren. Zwar durchaus immer wieder von Qt abgeleitet, aber niemals darauf verlassend, dass es schon in Qt gehen könnte.
Verfasst: 19. September 2007 15:23
von Stefan Majewsky
Danke für die Antwort. Ich habe mittlerweile noch weiter in der Dokumentation gegraben und bin auf einige Sachen gestoßen, mit denen ich es zumindest so weit gebracht habe, dass eingefügter Text eine Hintergrundfarbe erhält. Dazu habe ich QTextDocument abgeleitet und das Signal QTextDocument::contentsChange mit folgendem Slot verbunden:
Code: Alles auswählen
void KiTextDocument::contentsChangeSlot(int position, int charsRemoved, int charsAdded) {
if (charsAdded > 0) {
QTextCursor cursor(this); //creates cursor pointing at beginning of text
cursor.movePosition(QTextCursor::NextCharacter, QTextCursor::MoveAnchor, position);
cursor.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor, charsAdded);
QTextCharFormat format = this->begin().charFormat(); //character format in the first block (-> inherit font color etc.)
format.setBackground(QBrush(Qt::green)); //green is just an example
cursor.setCharFormat(format); //apply highlighting
}
}
Wenn man eine bool-Variable (in meinem Fall this->m_updating) hinzufügt, kann man auch steuern, dass Texte, die softwareseitig eingefügt werden (z.B. beim Laden von Dateien) nicht farbig markiert werden.
Verfasst: 19. September 2007 15:30
von FlorianBecker
Ja, eine gute Idee. Ich hätte mehr an etwas komplexeres gedacht, aber wenn das für dich reicht. Perfekt.