作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有没有办法在 QPlainTextEdit 中提取相对于光标的几行文本,但只提取光标上方和下方的行,直到找到空行?
示例数据:
AA
BB
CC
DD
EE
FF
GG
HH
II
根据 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/
我是一名优秀的程序员,十分优秀!