gpt4 book ai didi

c++ - QPlainTextEdit/QTextCursor - 如何获取光标上方和下方的行直到上方和下方为空行

转载 作者:行者123 更新时间:2023-11-28 04:37:33 25 4
gpt4 key购买 nike

有没有办法在 QPlainTextEdit 中提取相对于光标的几行文本,但只提取光标上方和下方的行,直到找到空行?

示例数据:

AA
BB
CC

DD
EE
FF

GG
HH
II
  • 案例 1:光标在 'EE' 行,我想获取 DD、EE、FF 行。
  • 情况 2:光标在 'DD' 行,我想获取 DD、EE、FF 行。
  • 情况 3:光标在 'CC' 行上,我想获取 AA、BB、CC 行。

根据 QTextCursor 文档,当我想提取一个 block 时,我得到一个段落,该段落被定义为以新行结尾的文本。我可以循环直到找到一个空行,但这似乎是一个糟糕的解决方案。

最佳答案

解决方案是遍历 QTextBlock,如下所示:

#include <QApplication>
#include <QPlainTextEdit>
#include <QTextBlock>

#include <QDebug>

static QString getLinesBetweenSpaces(const QTextBlock & block){
QTextBlock before = block;
QTextBlock after = block;

if(block.text().trimmed().isEmpty())
return "";

QStringList lines{block.text()};

do{
before = before.previous();
if(before.text().trimmed().isEmpty())
break;
lines.prepend(before.text());
}
while(before.isValid());

do{
after = after.next();
if(after.text().trimmed().isEmpty())
break;
lines.append(after.text());
}
while(after.isValid());
return lines.join("\n");
}

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

const QStringList lines = {"AA", "BB", "CC", " ", "DD", "EE", "FF", " ", "GG", "HH", "II"};
const QString text = lines.join("\n");
QPlainTextEdit w;
w.setPlainText(text);

QObject::connect(&w, &QPlainTextEdit::cursorPositionChanged, [&w](){
qDebug()<< getLinesBetweenSpaces(w.textCursor().block());
});
w.show();

return a.exec();
}

关于c++ - QPlainTextEdit/QTextCursor - 如何获取光标上方和下方的行直到上方和下方为空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50995743/

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