2012-05-02 17 views
5

Sono in difficoltà con la rimozione di blocchi/linee da QTextEdit. Il codice qui sotto dovrebbe (?) Funzionare ma finisce in loop infinito per qualche motivo sconosciuto a me. Ho il sospetto che next() e previous() non siano i benvenuti se si sta modificando lo QTextDocument.Rimuovere una riga/blocco da 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(); 
} 

Iterando utilizzando QTextDocument::findBlockByNumber() e cancellare blocchi nello stesso modo come sopra non funzionato neanche.

Apprezzerei se qualcuno potesse indicarmi la giusta direzione su come iterare attraverso tutti i blocchi e rimuoverli se necessario.

P.S.
Nel mio caso particolare un blocco = una linea.
Qt 4.6.2, Ubuntu 10.04 x64

risposta

5

Cambiare un po 'funziona per me:

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

corretta. Perché ovviamente 'removeSelectedText()' uccide il blocco e 'next()' non funziona più. Grazie! :) –