2009-12-04 9 views
6

Jestem całkowicie nowy w C++ i Qt.Jak korzystać z QTextBlock?

Chcę wypełnić obiekt QTextEdit za pomocą QTextBlocks, w jaki sposób mogę to zrobić?

np. Jeśli mam zdanie "nadchodzą ryby", jak umieścić każde słowo w swoim własnym QTextBlock i dodać ten blok do QTextEdit, czy też źle zrozumiałem, jak działa QTextBlock?

Odpowiedz

10

QTextEdit pozwolisz dodać zawartość poprzez QString:

QTextEdit myEdit("the fish are coming"); 

pozwala także użyć QTextDocument, która posiada bloki tekstu. Sam QTextDocument również może zaakceptować QString:

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

Jednak „Jeśli chcesz utworzyć nowy blok tekstu lub zmodyfikować treść dokumentu badając jego zawartość, należy użyć interfejsu kursora na bazie dostarczonej przez QTextCursor zamiast. " (Qt documentation) (Uwaga, dodałem QTextBlockFormat linii, aby to jednoznacznie, gdzie bloki są.)

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(); 

Wydaje się to dużo wysiłku, aby przejść przez mnie. Czy możesz podać dodatkowe informacje na temat powodów, dla których uważasz, że musisz używać QTextBlock s?

+0

Piszę program, który pomoże ludziom czytać inny język (grecki) i każde słowo ma inną gramatyczną informację (np. "Czasownik, orientacyjny, aktywny, trzecia osoba, osobliwy"), który chciałbym wyświetlić, gdy mysz jest przesuwana nad każdym słowem. – jcuenod

+0

Ach, to ma więcej sensu niż wtedy. Jednym z problemów z moim przykładem jest to, że każdy blok jest wyświetlany jako osobna linia. Nie mam wystarczającego doświadczenia z 'QTextBlock's, aby wiedzieć, jak uzyskać je na tej samej linii. Powodzenia! – Bill

0

Należy sprawdzić dokumentację here

Można przypisać ciąg do QString a następnie dodać, że do QTextEdit, czy można analizować sekcję QString using() zobaczyć here

1

Trzymaj je w tej samej linii, używając metody insertText bez użycia funkcji InsertBlock.

Na przykład, gdy próbowałem

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

dla ciebie wszystkie słowa pojawiły się na tej samej linii.

insertBlock wstawia akapit.

+0

Czy jest sposób na to zrobić z wieloma QTextBlocks? Jak rozumiem, tworzy to wiele fragmentów w jednym QTextBlock. – ibizaman