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 属性

Jquery 从下拉列表中获取 SelectedText

C# Windows 窗体 DateTimePicker,如何获取 SelectedText、SelectionStart 和 SelectionLength?

在RichTextBox控件中替换文本文字

重新加载 QTextEdit 文本