2013-03-10 966 views
3

我使用這段代碼,試圖從一個QTextEdit刪除最後一行:刪除最後一行從的QTextEdit

ui->textEdit_2->textCursor().setPosition(QTextCursor::End); 
    auto k = ui->textEdit_2->textCursor().currentTable(); 
    k->removeRows(k->rows() - 1, 1); 

但我得到一個分段錯誤。調試後,我發現調用removeRows時,k是空的。

我做錯了什麼?如果是的話,該如何解決?

+0

根據Qt文檔,'的QTextEdit :: curentTable'如果光標的塊不是表的一部分內返回0。你的文字是不是完全依賴_tables_? – cubuspl42 2013-03-10 19:41:09

回答

7

嘗試此(測試):

ui->textEdit_2->setFocus(); 
QTextCursor storeCursorPos = ui->textEdit_2->textCursor(); 
ui->textEdit_2->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor); 
ui->textEdit_2->moveCursor(QTextCursor::StartOfLine, QTextCursor::MoveAnchor); 
ui->textEdit_2->moveCursor(QTextCursor::End, QTextCursor::KeepAnchor); 
ui->textEdit_2->textCursor().removeSelectedText(); 
ui->textEdit_2->textCursor().deletePreviousChar(); 
ui->textEdit_2->setTextCursor(storeCursorPos); 
+0

這很好用,謝謝! – user1233963 2013-03-10 20:13:58

+0

well spotted ui-> textEdit_2-> textCursor()。deletePreviousChar(); – Viv 2013-03-10 20:55:33

2

(就要離開這個未刪除的展示做同樣的動作的另一種方式)

你可以試試這個刪除最後一行:

QTextCursor cursor = ui->textEdit_2->textCursor(); 
cursor.movePosition(QTextCursor::End); 
cursor.select(QTextCursor::LineUnderCursor); 
cursor.removeSelectedText(); 
cursor.deletePreviousChar(); // Added to trim the newline char when removing last line 
ui->textEdit_2->setTextCursor(cursor); 

如果你想本來恢復光標位置到它那裏在調用前只保存光標位置

cursor.movePosition(QTextCursor::End); 

然後刪除文本後。

ui->textEdit_2->setTextCursor(savedCursorPos); 
+0

我測試過你的方式,沒有效果?什麼是'savedCursorPos'? – deepmax 2013-03-10 19:49:28

+0

在第一個塊soz忘記了setCursor(cursor)語句! – Viv 2013-03-10 19:51:59

+0

@MM。您還需要添加塊中的最後一行。 UI-> textEdit_2-> setTextCursor(光標);爲它實際更新。 – Viv 2013-03-10 19:53:58