2012-05-02 35 views
5

Tôi đang gặp khó khăn trong việc xóa khối/dòng khỏi QTextEdit. Mã dưới đây nên (?) Làm việc nhưng nó kết thúc trong vòng lặp vô hạn cho một số lý do không rõ cho tôi. Tôi có nghi ngờ rằng next()previous() không được hoan nghênh nếu QTextDocument đang được chỉnh sửa.Xóa một dòng/khối khỏi 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(); 
} 

Lặp lại sử dụng QTextDocument::findBlockByNumber() và xóa khối theo cách tương tự như trên đã không hoạt động.

Tôi sẽ đánh giá cao nếu ai đó có thể chỉ cho tôi đúng hướng về cách lặp lại máng tất cả các khối và xóa chúng nếu cần.

P.S.
Trong trường hợp cụ thể của tôi, một khối = một dòng.
Qt 4.6.2, Ubuntu 10.04 x64

Trả lời

5

Thay đổi nó một chút công việc cho tôi:

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

đúng. Bởi vì rõ ràng 'removeSelectedText()' giết chết khối, và 'next()' không hoạt động nữa. Cảm ơn! :) –