有没有办法让每一行显示在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);
Run Code Online (Sandbox Code Playgroud)
在textEdit中将"someText"显示为2行
bla bla bla bla bla bla bla bla bla
bla bla bla bla
Run Code Online (Sandbox Code Playgroud)
现在我想得到我的QTextEdit中显示的每一行.但是我还没有实现这个目标.
起初我天真地尝试过
textEdit->toPlainText().split("\n")
Run Code Online (Sandbox Code Playgroud)
遗憾的是,它没有给我包裹的线条,因为包装不会插入换行符.
所以我认为也许QTextDocument是要走的路,结果也是死路一条.
QTextDocument* doc = textEdit->document();
qDebug() << "document linecount: " << doc->lineCount();
qDebug() << "block count:" << doc->blockCount();
qDebug() << "lines in block: " << doc->findBlock(1).lineCount();
Run Code Online (Sandbox Code Playgroud)
每个返回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;
}
Run Code Online (Sandbox Code Playgroud)
现在您只需调用splitByLines(textEdit-> document())即可获得所需内容.请注意,当文档布局(请参阅documentLayoutChanged())或内容(请参阅contentsChanged())更改时,您必须重新提取行.
| 归档时间: |
|
| 查看次数: |
645 次 |
| 最近记录: |