首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >QPlainTextEdit / QTextCursor -如何获取光标上方和下方的行,直到上方和下方为空行

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

Stack Overflow用户
提问于 2018-06-23 05:20:14
回答 1查看 440关注 0票数 1

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

示例数据:

代码语言:javascript
复制
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文档,当我想提取一个块时,我得到一个段落,它被定义为以新行结尾的文本。我可以循环直到找到一个空行,但这似乎是一个糟糕的解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-23 06:44:59

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

代码语言:javascript
复制
#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();
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50995743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档