2015-01-07 19 views
8

Potrzebuję usunąć konkretną linię z QTextEdit (opcja NoWrap jest aktywna) manualy z programu. Znalazłem rozwiązanie, które wyjaśnia, jak usunąć pierwszą linię, ale zastanawiam się, jak mogę usunąć całą linię w określonym indeksie.QTextEdit usunąć całą linię w danej pozycji

Znalazłem również rozwiązanie tutaj Remove a line/block from QTextEdit, ale nie wiem, jakie są te bloki. Czy reprezentują pojedyncze linie, czy nie? Czy powinienem przejrzeć te bloki i czy osiągam blok w danym indeksie, a następnie go usunąć?

+0

Zgodnie z dokumentem odstępu QT, blok = ust. Podczas gdy tytuł pytania, do którego się zgłosiłeś, może być mylący, osoba pytająca dodała: "* W moim przypadku jeden blok = jedna linia *". – Tay2510

+0

Ok, więc gdy opcja NoWrap jest aktywna dla linii, to blok = akapit = linia, czy mam rację? – Michal

+0

Tak, możesz to powiedzieć. – Tay2510

Odpowiedz

6

Można usunąć wiersz w lineNumer z:

QTextCursor cursor = textEdit->textCursor(); 

cursor.movePosition(QTextCursor::Start); 
cursor.movePosition(QTextCursor::Down, QTextCursor::MoveAnchor, lineNumer); 
cursor.select(QTextCursor::LineUnderCursor); 
cursor.removeSelectedText(); 

textEdit->setTextCursor(cursor); 

Tutaj można umieścić kursor na początku dokumentu, przesuń w dół lineNumer razy, wybrać konkretną linię i usuń go.

+0

Byłoby rozsądne, aby również wyłączyć kursor na tak krótki okres, więc naciśnięcie przycisku lub kliknięcie myszką nie przeszkadzałoby. Szanse są niewielkie, ale może to być niebezpieczne. – vsz

+2

Nice! Chociaż czuję "kursor QTextCursor = ui-> textEdit-> textCursor(); cursor.select (QTextCursor :: LineUnderCursor); cursor.removeSelectedText(); 'wystarcza, aby wykonać zadanie. – Tay2510

+0

Dopóki nie ma wielu wątków wchodzących w interakcję z GUI, nie powinno być przypadków, w których kursor mógłby zostać zmieniony w trakcie wykonywania sekwencji. Qt przetwarza zdarzenia użytkownika w pętli zdarzeń – theorifice

1

można wykonać następujące czynności:

QTextEdit te; 
// Three lines in the text edit 
te.setText("Line 1\nLine 2\nLine 3"); 

const int lineToDelete = 1; // To delete the second line. 
QTextBlock b = te.document()->findBlockByLineNumber(lineToDelete); 
if (b.isValid()) { 
    QTextCursor cursor(b); 
    cursor.select(QTextCursor::BlockUnderCursor); 
    cursor.removeSelectedText(); 
}