2009-12-04 23 views
6

Ich bin komplett neu in C++ und Qt.Wie verwende ich QTextBlock?

Ich möchte ein QTextEdit Objekt mit QTextBlocks befüllen, wie mache ich das?

z.B. Wenn ich den Satz "Die Fische kommen" habe, wie würde ich jedes Wort in seine eigene QTextBlock setzen und diesen Block zu QTextEdit hinzufügen, oder habe ich missverstanden, wie QTextBlock tatsächlich funktioniert?

Antwort

10

QTextEdit lassen Sie analysieren fügen Sie Ihre Inhalte über eine QString:

QTextEdit myEdit("the fish are coming"); 

Es erlaubt Ihnen auch eine QTextDocument zu verwenden, die Textblöcke hält. Die QTextDocument selbst kann auch ein akzeptieren QString:

QTextEdit myEdit; 
QTextDocument* myDocument = new QTextDocument("the fish are coming", &myEdit); 
myEdit.setDocument(myDocument); 

jedoch: „Wenn Sie einen neuen Textblock erstellen oder den Inhalt eines Dokuments ändern, während dessen Inhalt untersucht, mit der Cursor-basierten Schnittstelle zur Verfügung gestellt von statt. " (Qt documentation) (Beachten Sie, habe ich die QTextBlockFormat Linien es explizit zu machen, wo die Blöcke.)

QTextEdit myEdit; 
QTextDocument* myDocument = new QTextDocument(&myEdit); 
myEdit.setDocument(myDocument); 
QTextCursor* myCursor = new QTextCursor(myDocument); 

QTextBlockFormat format; 
format.setBackground(Qt::red); 
myCursor->setBlockFormat(format); 

myCursor->insertText("the "); 

format.setBackground(Qt::green); 
myCursor->insertBlock(format); 
myCursor->insertText("fish "); 

format.setBackground(Qt::yellow); 
myCursor->insertBlock(format); 
myCursor->insertText("are "); 

format.setBackground(Qt::red); 
myCursor->insertBlock(format); 
myCursor->insertText("coming!"); 

format.setBackground(Qt::green); 
myCursor->insertBlock(format); 
myCursor->insertText(QString(%1 blocks").arg(myDocument->blockCount())); 
myEdit.show(); 

wie viel Mühe Scheint mir zu gehen. Können Sie weitere Informationen darüber geben, warum Sie das Gefühl haben, dass Sie QTextBlock s verwenden müssen?

+0

Ich schreibe ein Programm, um Menschen zu helfen, eine andere Sprache zu lesen (Griechisch) und jedes Wort hat andere grammatikalische Informationen (wie "Verb, Indikativ, Aktiv, 3rd Person, Singular"), die ich gerne anzeigen würde Die Maus wird über jedes Wort bewegt. – jcuenod

+0

Ah, das macht mehr Sinn. Ein Problem mit meinem Beispiel ist, dass jeder Block als eigene Zeile angezeigt wird. Ich habe nicht genug Erfahrung mit QTextBlocks, um zu wissen, wie man sie in die gleiche Zeile bringt. Viel Glück! – Bill

0

sollten Sie überprüfen die Dokumentation here

Sie Ihre String in einen QString zuordnen konnte und dann hinzufügen, dass auf die QTextEdit, oder Sie können den QString mit Abschnitt() siehe here

1

Halten Sie sie in der gleichen Zeile, indem Sie insertText verwenden, ohne insertBlock dazwischen zu verwenden.

Zum Beispiel, als ich versuchte,

cursor.insertText("I will try ", textFormat); 
cursor.insertText("this for you.", textFormat); 

für Sie, alle die Worte erschienen auf der gleichen Linie.

insertBlock fügt einen Absatz ein.

+0

Gibt es eine Möglichkeit, dies mit mehreren QTextBlocks zu tun? So wie ich es verstehe, erzeugt dies mehrere Fragmente in einem QTextBlock. – ibizaman