gpt4 book ai didi

c++ - 为什么 select(QTextCursor::BlockUnderCursor) 包含一个额外的垃圾字符?

转载 作者:行者123 更新时间:2023-11-28 07:46:05 27 4
gpt4 key购买 nike

Windows 7 SP1
MSVS 2010
Qt 4.8.4

我正在使用 QTextCursor 来抓取每个 block 的文本。我使用 select(QTextCursor::BlockUnderCursor) 获取文本,然后使用 movePosition(QTextCursor::NextBlock) 转到下一个 block 。但是当我再次选择 select(QTextCursor::BlockUnderCursor) 时,我在 QString 中得到了一个额外的垃圾字符,并且 anchor 已移动到前一个 block 的末尾。

将其用于 text.txt:

A
B

此代码的注释遍历问题并提出问题:

 #include <QTGui>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QMainWindow* window = new QMainWindow;
QTextEdit* editor = new QTextEdit(window);
QTextDocument* document = new QTextDocument(window);

editor->setDocument(document);
QFile file("test.txt");
if (file.open(QFile::ReadOnly | QFile::Text))
editor->setPlainText(file.readAll());

QTextBlock block = document->begin();
QTextCursor* cursor = new QTextCursor(document);
int pos = cursor->position(); // = 0
int anchor = cursor->anchor(); // = 0

cursor->select(QTextCursor::BlockUnderCursor);
pos = cursor->position(); // = 1
anchor = cursor->anchor(); // = 0

QString text = cursor->selectedText(); // = "A"
int size = text.size(); // = 1

cursor->movePosition(QTextCursor::NextBlock);
pos = cursor->position(); // = 2
anchor = cursor->anchor(); // = 2

cursor->select(QTextCursor::BlockUnderCursor);
pos = cursor->position(); // = 3
anchor = cursor->anchor(); // = 1 Why not 2?

text = cursor->selectedText(); // "B" in debugger
// but text.at(0) = junk & test.at(1) = "B"
size = text.size(); // = 2 Why? Why not 1?

return app.exec();
}

最佳答案

这不是垃圾。第一个字符包括 U+2029 段落分隔符(HTML:PSEP)。换句话说,选择 block 包括起始段落分隔符。第一个区 block 没有起始 SEP。因此,如果要单独提取后续 block 的文本,需要排除第一个字符。

关于c++ - 为什么 select(QTextCursor::BlockUnderCursor) 包含一个额外的垃圾字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14864424/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com