首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QTextDocument::DrawContent跳过资源吗?

QTextDocument::DrawContent跳过资源吗?
EN

Stack Overflow用户
提问于 2018-01-24 14:13:25
回答 1查看 436关注 0票数 2

我有这样的设置:

代码语言:javascript
复制
// ...

// variable document is a QTextDocument* which has some 'RichText' + 'Images'

QTextEdit textEdit;

textEdit.setDocument(document);

textEdit.setLineWrapMode(QTextEdit::LineWrapMode::NoWrap);

auto image = QImage(document->size().width(), document->size().height(),
                       QImage::Format_ARGB32_Premultiplied);

image.fill(Qt::transparent);

QPainter painter(&image);

document->drawContents(&painter);
     
// ...

我这样做是为了让我的文本呈现在一个长的水平QImage中(因此是"NoWrap“LineWrapMode),所以我可以使用QImage::copy(QRect)一次选择其中的一小部分,并创建一个滚动文本效果。

我这样做的原因是,我需要在最后有一个QImage,然后将它的缓冲区(QImage::bits())提供给我使用的硬件作为我的最终输出。

因此,它工作很好,它显示格式的文本与字体和颜色和一切,除了图像,它似乎跳过他们,注意文件图标在“结果文本与图像”图片。

这是仅在编辑器中的文本

这仅仅是文本的结果。

这是编辑器中带有图像的文本。

这是文本和图像的结果。

我就是这样将图像插入到我的QTextDocument中的:

代码语言:javascript
复制
QImage image(url.toLocalFile());

if (image.isNull())
    return;

image = image.scaledToHeight(getDocumentHeight(), Qt::SmoothTransformation);

auto filename = QUrl(url.fileName());

textEdit->document()->addResource(QTextDocument::ImageResource, filename, image);

textEdit->textCursor().insertImage(filename);

所以我不认为这是因为"DrawContents“无法找到图像资源文件或类似的东西。

我该怎么办?我遗漏了什么吗?在这件事上任何形式的帮助都是非常感谢的!)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-24 15:41:46

在下面的代码中,我将演示如何加载图像,然后将其保存到文件中,可能错误是您尚未完成绘制,因此必须调用painter.end()或从内存中删除绘制器。

main.cpp

代码语言:javascript
复制
#include <QtWidgets>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QWidget widget;
    QVBoxLayout vlayout(&widget);
    QTextEdit textEdit;
    QPushButton button("save image");
    QPushButton loadButton("Load and Insert");
    vlayout.addWidget(&loadButton);
    vlayout.addWidget(&textEdit);
    vlayout.addWidget(&button);

    widget.show();

    textEdit.append("some text");

    QObject::connect(&loadButton, &QPushButton::clicked,[&textEdit](){
        QString filename =  QFileDialog::getOpenFileName(&textEdit, "Select", "", "*.png");
        if(!filename.isEmpty()){
            QImage image(filename);
            QUrl url = QUrl::fromLocalFile(filename);
            image = image.scaledToHeight(100, Qt::SmoothTransformation);
            textEdit.document()->addResource(QTextDocument::ImageResource, url, image);
            textEdit.textCursor().insertImage(image);
        }
    });

    QObject::connect(&button, &QPushButton::clicked, [&textEdit](){
        QImage image(textEdit.document()->size().toSize() , QImage::Format_ARGB32_Premultiplied);
        image.fill(Qt::transparent);
        QPainter painter(&image);
        textEdit.document()->drawContents(&painter);
        painter.end();
        image.save("image.png");

    });

    return a.exec();
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48424541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档