[gelöst] Hintergrundfarbe im QTextEdit

Alles rund um die Programmierung mit Qt
Antworten
Stefan Majewsky
Beiträge: 3
Registriert: 13. September 2007 20:22

[gelöst] Hintergrundfarbe im QTextEdit

Beitrag 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.
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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.
Stefan Majewsky
Beiträge: 3
Registriert: 13. September 2007 20:22

Beitrag 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.
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Ja, eine gute Idee. Ich hätte mehr an etwas komplexeres gedacht, aber wenn das für dich reicht. Perfekt.
Antworten