gpt4 book ai didi

c++ - 如何从 QTextDocument 中的行计算高度?

转载 作者:行者123 更新时间:2023-11-28 06:05:17 26 4
gpt4 key购买 nike

我想计算 QTextDocument 中每行的边界矩形(位置、大小)。我尝试绘制每一行提供的矩形,但我遇到了麻烦!

这是我做的:

QTextBlock currentBlock = tempDocument->begin();
while (currentBlock.isValid())
{
const int nbLines = currentBlock.layout()->lineCount();
for (int i(0); i < nbLines; ++i)
{
QTextLine currentLine = currentBlock.layout()->lineAt(i);

painter->save();
painter->setPen(QPen(Qt::blue, 1));
painter->drawRect(currentLine.rect());
painter->restore();
}
currentBlock = currentBlock.next();
}

这是我得到的:(请参阅文本 1:Text 1 - 2 - 3)

它并没有真正起作用......所以我尝试自己用类似的东西来做:

float transY(tempDocument->documentMargin());
QTextBlock currentBlock = tempDocument->begin();
while (currentBlock.isValid())
{
const int nbLines = currentBlock.layout()->lineCount();
for (int i(0); i < nbLines; ++i)
{
QTextLine currentLine = currentBlock.layout()->lineAt(i);
currentLine.setLeadingIncluded(true);

painter->save();
painter->setPen(QPen(Qt::blue, 1));
painter->drawRect(QRectF(0, transY, currentLine.width(), currentLine.height()));
painter->restore();
transY += currentLine.height();
}
currentBlock = currentBlock.next();
}

每当我使用来自互联网的原始文本时,我都会说,这是完美的:

(请参阅文本 2)

但是,如果我将相同的文本与段落 (< p >) 一起使用,计算就会完全困惑。如何计算两个段落之间的间距?

(请参阅文本 3)

任何想法或帮助将不胜感激!谢谢!

PS:抱歉,我本来可以发布图片,但我不能!

最佳答案

标准 Qt API 不可能,但您可以从私有(private) Qt 类获得边界矩形 QTextDocumentLayout .查看下一个公共(public)方法:

virtual QRectF frameBoundingRect(QTextFrame *frame) const;
virtual QRectF blockBoundingRect(const QTextBlock &block) const;
QRectF tableBoundingRect(QTextTable *table) const;
QRectF tableCellBoundingRect(QTextTable *table, const QTextTableCell &cell) const;

您可以通过在 pro 文件中添加私有(private)类(class)

QT += gui-private

并包括

#include <private/qtextdocumentlayout_p.h>

默认情况下,QTextDocument 有 QTextDocumentLayout,因此您可以转换文档布局并获取所需信息:

QTextDocumentLayout* pDocumentLayout = qobject_cast<QTextDocumentLayout*>(textDocument.documentLayout());

关于c++ - 如何从 QTextDocument 中的行计算高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32503874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com