Qt在QtWebEngine视图中显示QImage或像素映射(从C++到HTML)



在Qt中,我想显示图像(例如QImage)或从C++到WebEngine的html的任何类型的像素映射。怎么做?

例如,在我的html(由WebEngineView显示)中,有:

<img src="???" id="myImg">

现在我希望能够从C++代码中提供此图像。所以我将生成这个图像(使用一些算法),我想在网络浏览器中显示它。

这也可以使用自定义 UrlSchemeHandler 来完成。

class ImageLoaderUrlSchemeHandler : public QWebEngineUrlSchemeHandler
{
    Q_OBJECT
public:
    ImageLoaderUrlSchemeHandler(QObject *parent = Q_NULLPTR) : QWebEngineUrlSchemeHandler(parent) { }
    void requestStarted(QWebEngineUrlRequestJob *job)
    {
        QUrlQuery urlq(job->requestUrl());
        // use job->requestUrl().host(), job->requestUrl().fileName(), etc.
        // and urlq to get info from query
        QBuffer *respBuffer = new QBuffer;
        image.save(respBuffer, "BMP");
        // delete buffer after request completed
        connect(respBuffer, &QBuffer::aboutToClose, respBuffer, &QBuffer::deleteLater);
        job->reply("image/bmp", respBuffer);
    }
};

// install handler for one page
webEngineView->page()->profile()->installUrlSchemeHandler(QByteArray("imldr"), new ImageLoaderUrlSchemeHandler(env));
// or use QWebEngineProfile::defaultProfile() for all pages

<img src="imldr://myapp/myhandler?param1=value1&param2=value2" id="myImg">

您可以转换为图像数据库64

QByteArray ba;
QBuffer bu(&ba);
image.save(&bu, "PNG");
QString imgBase64 = ba.toBase64(QByteArray::Base64Encoding); // Qt 5.6
<img src="data:image/png;base64,"+imgBase64+"id="myImg">

最新更新