qtextedit selectedtext() 返回控制字符
Posted
技术标签:
【中文标题】qtextedit selectedtext() 返回控制字符【英文标题】:qtextedit selectedtext() return control characters 【发布时间】:2017-10-04 07:57:17 【问题描述】:我有只从 qtextedit 返回选定文本的函数。 我需要获取纯文本,但此函数返回带有一些控制字符的文本。
例如: 函数 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"
在第一个示例中是?(问号)没有输入,我无法替换它们。
我做错了什么?
【问题讨论】:
补充:第二个例子效果很好。第一个在 sqlite 中无法使用,因为有问号 这很可能是 QTextCursor 的限制。为什么不使用第二个例子? sqlite 中的换行符很好 你试过doc.qt.io/qt-5/qtextcursor.html#selection - 也许这会报告正确的字符 谢谢菲利克斯。 selection().toPlainText() 解决了问题。我认为问号是 CZ / SK 版本中的一个错误。 @Felix 谢谢。然后,QTextDocumentFragment::toPlainText()
可用于获得与QTextDocument::toPlainText()
相同的行为,而不是在输出中替换某些字符!
【参考方案1】:
将 cmets 总结为答案:
正如QTextCursor::selectedText
的文档所述:
注意:如果从编辑器获得的选择跨越换行符,则 文本将包含一个 Unicode U+2029 段落分隔符 而不是换行符 \n 字符。使用 QString::replace() 替换 这些字符带有换行符。
在调试输出中显示为?
。可以使用文档中所述的QString::replace
,也可以使用QTextCursor::selection
(通过使用selection().toPlainText()
从选择中获取文本)
【讨论】:
我注意到文档中关于段落的注释。但在我看来,调试似乎不会将此字符显示为问号:-)。当然,替换“\n”字符是代码中的第一件事。但这并没有导致任何结果。在这种情况下,无法替换“\n”,但我想必须替换字符代码 U+2029。 是的,就是这样。您可以从该 unicode 整数初始化QChar
以上是关于qtextedit selectedtext() 返回控制字符的主要内容,如果未能解决你的问题,请参考以下文章
我应该使用 Winforms 组合框的 SelectedItem、SelectedText 还是 SelectedValue?
MVVM 和 TextBox 的 SelectedText 属性
C# Windows 窗体 DateTimePicker,如何获取 SelectedText、SelectionStart 和 SelectionLength?