3

次のコードを使用して、QTextEdit のコンテンツを QPixmap にレンダリングすることに成功しました。しかし、これは QPlainTextEdit では失敗します。QTextEdit の代わりに QPlainTextEdit を使用すると、コンテンツが色なしでレンダリングされます (すべて黒/白)。

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を使用しています

4

1 に答える 1

4

調査の結果、解決策が見つかりました。

基本的に、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();
    }
}
于 2015-02-09T07:18:34.737 に答える