如何使用颜色将QPlainTextEdit内容渲染到QPixmap
How to render QPlainTextEdit content to QPixmap with colors?
我成功地使用以下代码将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();
}
}
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 如何使用 PPM 格式的 uchar* 数组填充 QPixmap
- 解决方法:QPixmap:在GUI线程之外使用pixmap是不安全的
- 尝试使用 Qt 库中的 QPixmap 将图像拆分为多个块。关于他的复制方法的工作方式,我有什么不明白的吗?
- 如何在另一个类上使用qpixmap
- 如何使用QVector的QPixmap显示图像?
- 如何使用QPixmap,以便在地址中只需要使用项目文件夹
- 使用 QPixmap 和 QLabel 在 Qt Creator 中以编程方式添加图像文件 (.PNG)
- 使用 LLVM 的 libc++ 时,__1 符号从何而来?
- 在std::cout之后使用std::cin时,换行符从何而来
- 为什么以及在何处在C++中使用引用和指针
- QPixmap的loadFromData函数使用了一些奇怪的缓存机制?
- 使用Qt动画框架的QPixmap的断断续续的滚动
- 如何使用颜色将QPlainTextEdit内容渲染到QPixmap
- 使用QPixmap作为OpenGL纹理
- 使用QPixmap的Qt内存泄漏
- 使用QT Creator-C++中的QPixmap序列创建视频文件
- 基例如何影响使用递归函数的哪些行
- QPixmap不能使用存储在变量中的图像路径
- 如何使用C++和Qt将QPixmap保存为文件夹中的图片