【问题标题】:Get wrapped lines of QTextEdit获取 QTextEdit 的换行
【发布时间】:2017-10-31 14:37:16
【问题描述】:

有没有办法让每一行显示在 QTextEdit 中?

我有一些未格式化的文本显示在 QTextEdit 中,如下所示:

QString someText = "bla bla bla bla  bla bla bla bla bla bla bla bla bla";
QTextEdit* texEdit = new QTextEdit();
textEdit->setLineWrapMode(QTextEdit::FixedColumnWidth);
texEdit->setLineWrapColumnOrWidth(38);
texEdit->setWordWrapMode(QTextOption::WordWrap);
texEdit->setText(someText);

在 textEdit 中将“someText”显示为 2 行

bla bla bla bla  bla bla bla bla bla
bla bla bla bla

现在我想获得在我的 QTextEdit 中显示的每一行。 但是我还没有做到这一点。

一开始我天真地尝试了

textEdit->toPlainText().split("\n") 

不幸的是,它没有给我换行,因为换行不会插入换行符。

所以我想也许 QTextDocument 是要走的路,结果也是死路一条。

QTextDocument* doc = textEdit->document();

qDebug() << "document linecount: " << doc->lineCount();
qDebug() << "block count:" << doc->blockCount();
qDebug() << "lines in block: " << doc->findBlock(1).lineCount();

每个都返回 1。

任何帮助将不胜感激,谢谢!

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    您需要将包装文本的每一行(在 QTextEdit 中显示)作为单独的 QString 获取,对吧?

    来自 QTextEdit 控件的QTextDocument 按段落存储其文本(由QTextBlock 表示),每个段落布置为一组文本行(QTextLine)。您只需要从那里提取那些文本行。这是我的代码示例。

    QStringList splitByLines(const QTextDocument *doc)
    {
      if(!doc)
        return QStringList();
      QStringList ret;
      QTextBlock tb = doc->begin();
      while(tb.isValid())
      {
        QString blockText = tb.text();
        Q_ASSERT(tb.layout());
        if(!tb.layout())
          continue;
        for(int i = 0; i != tb.layout()->lineCount(); ++i)
        {
          QTextLine line = tb.layout()->lineAt(i);
          ret.append(blockText.mid(line.textStart(), line.textLength()));
        }
        tb = tb.next();
      }
      return ret;
    }
    

    现在你可以简单地调用 splitByLines(textEdit->document()) 来得到你想要的。请注意,当文档布局(参见documentLayoutChanged())或内容(参见contentsChanged())发生变化时,您必须重新提取行。

    【讨论】:

    • 谢谢!这正是我一直在寻找的。奇迹般有效。我以为我要生气了,因为我能找到的每个 lineCount 都返回 1。再次感谢!
    • 很高兴我能帮上忙 :) 实际上,我一直在寻找一个问题来提高我的声誉,以便能够为我喜欢的答案投票。所以谢谢你的问题;)
    猜你喜欢
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    相关资源
    最近更新 更多