2017-10-04 35 views
0

我有功能,只返回選定的文本從qtextedit。 我需要獲取純文本,但此函數返回帶有一些控制字符的文本。qtextedit selectedtext()返回控制字符

例如: 功能textEdit->的TextCursor()selectedText()的返回:

"select? timestamp,? strftime('%d.%m.%Y', Datetime(timestamp, 'unixepoch', 'localtime')) as date,? strftime('%H:%M:%S', Datetime(timestamp, 'unixepoch', 'localtime')) as time,? author,? from_dispname,? dialog_partner,? body_xml?from? Messages?where? timestamp >= 1501504199? -- timestamp >= 1502345001?order by? timestamp asc" 

功能textEdit-> toPlainText()的返回:

"select\n timestamp,\n strftime('%d.%m.%Y', Datetime(timestamp, 'unixepoch', 'localtime')) as date,\n strftime('%H:%M:%S', Datetime(timestamp, 'unixepoch', 'localtime')) as time,\n author,\n from_dispname,\n dialog_partner,\n body_xml\nfrom\n Messages\nwhere\n timestamp >= 1501504199\n -- timestamp >= 1502345001\norder by\n timestamp asc" 

在第一示例中是(問號)沒有進入,我無法取代他們。

我在做什麼錯?

+0

另外: 第二個例子效果很好。第一個在sqlite中是不可用的,因爲有問號 – exo

+0

這很可能是QTextCursor的限制。爲什麼不使用第二個例子?換行符在sqlite中很好 – Felix

+0

因爲我只需要選定的文本。第二個例子返回所有文本。在例子中都是相同的(對於ilustration)...但是在實際情況下,我將只需要幾條來自所有的選定行。 – exo

回答

2

爲了總結註釋了一個答案:

由於QTextCursor::selectedText狀態的文檔:

注意:如果從編輯獲得的選擇跨越線斷裂, 文本將包含一個Unicode U + 2029段落分隔符 而不是換行符\ n字符。使用QString :: replace()用換行符替換 這些字符。

在調試輸出中顯示時顯示爲?。一個既可以使用QString::replace如文檔中所述,或使用QTextCursor::selection代替(通過使用selection().toPlainText()獲得從選擇的文本)

+0

我注意到文檔中關於段落的註釋。但是在我看來,調試不會將這個字符顯示爲一個問號:-)。 替換「\ n」字符當然是代碼中的第一件事。但它沒有導致任何結果。 在這種情況下,不可能替換「\ n」,但我認爲char代碼U + 2029必須被替換。 – exo

+0

是的,就是這樣。你可以從該unicode整數初始化'QChar' – Felix