Как отобразить содержимое QPlainTextEdit в QPixmap с цветами?

Я успешно использовал следующий код для рендеринга содержимого 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 с цветами?
Пожалуйста, обратите внимание,

  • Если мы установим текст как html в QPlainTextEdit, то он генерирует цветной вывод.
  • я использую QSyntaxHighlighter::setFormat Функция для установки цвета текста.

я использую
Qt4.8.5, VS2008, Windows7

3

Решение

после расследования я нашел решение.

в основном, виджет QPlainTextEdit рисует только ту часть контента, которая видна. Поэтому мы не можем использовать QWidget-> render для получения всего содержимого. Но мы можем сделать это с помощью модифицированной версии функции paintEvent в QPlainTextEdit:

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();
}
}
4

Другие решения


По вопросам рекламы [email protected]