2012-05-02 12 views
5

Mam problem z usunięciem bloku/linii z QTextEdit. Poniższy kod powinien (?) Działać, ale kończy się nieskończoną pętlą dla nieznanego mi powodu. Podejrzewam, że next() i previous() nie są mile widziane, jeśli edytowane jest QTextDocument.Usuń linię/blok z QTextEdit

QTextBlock block = document()->begin(); 
while (block.isValid()) { 
    if (to_do_or_not_to_do(block)) { 
     QTextCursor cursor(block); 
     cursor.select(QTextCursor::BlockUnderCursor); 
     cursor.removeSelectedText(); 
    } 
    block = block.next(); 
} 

Iteracja użyciu QTextDocument::findBlockByNumber() i usuwanie bloku w taki sam sposób jak powyżej nie pracowali albo.

Byłbym wdzięczny, gdyby ktoś mógł skierować mnie we właściwym kierunku, w jaki sposób przeprowadzać iteracje przez wszystkie bloki i usuwać je w razie potrzeby.

P.S.
W moim przypadku jeden blok = jedna linia.
Qt 4.6.2, Ubuntu 10.04 x64

Odpowiedz

5

Zmiana to trochę roboty dla mnie:

while (block.isValid()) { 
    if (to_do_or_not_to_do(block)) { 
     QTextCursor cursor(block); 
     block = block.next(); 
     cursor.select(QTextCursor::BlockUnderCursor); 
     cursor.removeSelectedText(); 
    } 
    else 
     block = block.next(); 
} 
+0

Prawidłowe. Ponieważ oczywiście 'removeSelectedText()' zabija blok, a 'next()' nie działa. Dzięki! :) –