gpt4 book ai didi

c++ - 如何使用颜色将 QPlainTextEdit 内容渲染到 QPixmap?

转载 作者:太空狗 更新时间:2023-10-29 20:58:45 26 4
gpt4 key购买 nike

我成功地使用以下代码将 QTextEdit 的内容呈现为 QPixmap。但这对于 QPlainTextEdit 来说是失败的。当我使用 QPlainTextEdit 而不是 QTextEdit 时,它呈现的内容没有任何颜色(全部为黑色/白色)。

QPixmap* pixmap = new QPixmap(width, height);

QPainter* painter = new QPainter(pixmap);
painter->fillRect( 0, 0, width, height, QColor(247, 247, 247) );
painter->setRenderHints(QPainter::SmoothPixmapTransform |
QPainter::HighQualityAntialiasing |
QPainter::TextAntialiasing);

m_pTextEdit->document()->drawContents(painter);

我们如何用颜色渲染 QPlainTextEdit 的内容?请注意,

  • 如果我们在 QPlainTextEdit 中将文本设置为 html,那么它会生成彩色输出。
  • 我正在使用 QSyntaxHighlighter::setFormat 函数来设置文本颜色。

我正在使用Qt4.8.5、VS2008、Windows7

最佳答案

经过调查,我找到了解决办法。

基本上,QPlainTextEdit 小部件只绘制可见的部分内容。因此,我们无法通过QWidget->render来获取整个内容的渲染。但是我们可以通过 QPlainTextEdit 的 paintEvent 函数的修改版本来做到这一点:

void TextEditor::getScreenshot(QPixmap &map)
{
QPainter painter(&map);

int offset = 0;
block = document()->firstBlock();

while (block.isValid())
{
QRectF r = blockBoundingRect(block);
QTextLayout *layout = block.layout();

if (!block.isVisible())
{
offset += r.height();
block = block.next();
continue;
}
else
{
layout->draw(&painter, QPoint(0,offset));
}

offset += r.height();

block = block.next();
}
}

关于c++ - 如何使用颜色将 QPlainTextEdit 内容渲染到 QPixmap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26794080/

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