有没有办法在QPlainTextEdit中提取相对于光标的几行文本,而只提取光标上方和下方的行,直到找到空行?
示例数据:
AA
BB
CC
DD
EE
FF
GG
HH
II
基于QTextCursor文档,当我想提取一个块时,我得到一个段落,它被定义为以新行结尾的文本。我可以循环直到找到一个空行,但这似乎是一个糟糕的解决方案。
发布于 2018-06-23 06:44:59
解决方案是遍历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();
}
https://stackoverflow.com/questions/50995743
复制相似问题