2016-05-11 5 views
0

Ich habe eine QTextEdit, wo der Benutzer QTextDocument s bearbeiten kann.Setze Standardzeichenformat in QTextDocument

Ich möchte die Standardfarbe und Schriftart für das Dokument festlegen, das Format wird jedoch verworfen, wenn kein Text in der Datei vorhanden ist.

Hier ist mein Code:

QTextDocument *d = new QTextDocument; 
QTextCursor cur(d); 
cur.select(QTextCursor::Document); 

QTextBlockFormat f1; 
f1.setBackground(Qt::black); 
f1.setForeground(Qt::yellow); 
cur.setBlockFormat(f1); 

QTextCharFormat f2; 
f2.setForeground(Qt::yellow); 
QFont font("Times New Roman", 12); 
f2.setFont(font); 
cur.setBlockCharFormat(f2); 

editor->setDocument(d); 

Wenn der Editor angezeigt wird, ich eine Linie mit schwarzem Hintergrund zu sehen, die mit einer bestimmten Höhe. Es scheint also, dass dies funktioniert hat.

Sobald ich jedoch mit der Eingabe beginne, wird die Zeilengröße verringert und ich sehe keinen Text. Wenn ich den eingegebenen Text auswähle, kann ich sehen, dass er schwarz geschrieben ist (auf schwarzem Hintergrund) und seine Schriftart geändert wird.

Wenn ich etwas nicht leeren Text einfügen mit dem Cursor, alles funktioniert, und das Format geändert wird, nicht auf die Bearbeitung:

// Same as above... 
cur.insertText("A"); 
editor->setDocument(d); 

Gibt es eine Möglichkeit, dass der Editor das Format hält, ohne Blindtext einfügen ?

Ich kann ein Stylesheet oder eine Palette im Editor nicht verwenden, wie in anderen Fragen zu diesem Thema erwähnt. Alles muss direkt mit QTextFormat s

Antwort

0

Ich habe endlich die Lösung von mir gefunden.

Das Problem war, dass der Cursor des Editors nicht die erforderlichen Stilinformationen enthielt und Text mit dem Standardstil eingefügt wurde. Der Cursor des Editors muss aktualisiert werden.

ist die Lösung einfach den Cursor an den Anfang des Dokuments zu bewegen, wo sie den Stil holen wird:

// Build document as required... 
editor->setDocument(d); 

// This fixes the problem: 
QTextCursor editorCursor = editor->textCursor(); 
editorCursor.movePosition(QTextCursor::Start); 
editor->setTextCursor(editorCursor);