⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qtextimagehandler.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
字号:
/******************************************************************************** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.**** This file is part of the QtGui module of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file.  Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://trolltech.com/products/qt/licenses/licensing/opensource/**** If you are unsure which license is appropriate for your use, please** review the following information:** http://trolltech.com/products/qt/licenses/licensing/licensingoverview** or contact the sales department at sales@trolltech.com.**** In addition, as a special exception, Trolltech gives you certain** additional rights. These rights are described in the Trolltech GPL** Exception version 1.0, which can be found at** http://www.trolltech.com/products/qt/gplexception/ and in the file** GPL_EXCEPTION.txt in this package.**** In addition, as a special exception, Trolltech, as the sole copyright** holder for Qt Designer, grants users of the Qt/Eclipse Integration** plug-in the right for the Qt/Eclipse Integration to link to** functionality provided by Qt Designer and its related libraries.**** Trolltech reserves all rights not expressly granted herein.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include "qtextimagehandler_p.h"#include <qtextformat.h>#include <qpainter.h>#include <qpixmapcache.h>#include <qdebug.h>#include <private/qtextengine_p.h>#include <qpalette.h>#include <qtextbrowser.h>// set by the mime source factory in Qt3CompatQTextImageHandler::ExternalImageLoaderFunction QTextImageHandler::externalLoader = 0;static QPixmap getPixmap(QTextDocument *doc, const QTextImageFormat &format){    QPixmap pm;    QString name = format.name();    if (name.startsWith(QLatin1String(":/"))) // auto-detect resources        name.prepend(QLatin1String("qrc"));    QUrl url(name);    const QVariant data = doc->resource(QTextDocument::ImageResource, url);    if (data.type() == QVariant::Pixmap || data.type() == QVariant::Image) {        pm = qvariant_cast<QPixmap>(data);    } else if (data.type() == QVariant::ByteArray) {        pm.loadFromData(data.toByteArray());    }    if (pm.isNull()) {        QString context;#ifndef QT_NO_TEXTBROWSER        QTextBrowser *browser = qobject_cast<QTextBrowser *>(doc->parent());        if (browser)            context = browser->source().toString();#endif        QImage img;        if (QTextImageHandler::externalLoader)            img = QTextImageHandler::externalLoader(name, context);        if (img.isNull()) { // try direct loading            name = format.name(); // remove qrc:/ prefix again            if (name.isEmpty() || !img.load(name))                return QPixmap(QLatin1String(":/trolltech/styles/commonstyle/images/file-16.png"));        }        pm = QPixmap::fromImage(img);        doc->addResource(QTextDocument::ImageResource, url, pm);    }    return pm;}static QSize getPixmapSize(QTextDocument *doc, const QTextImageFormat &format){    QPixmap pm;    const bool hasWidth = format.hasProperty(QTextFormat::ImageWidth);    const int width = qRound(format.width());    const bool hasHeight = format.hasProperty(QTextFormat::ImageHeight);    const int height = qRound(format.height());    QSize size(width, height);    if (!hasWidth || !hasHeight) {        pm = getPixmap(doc, format);        if (!hasWidth)            size.setWidth(pm.width());        if (!hasHeight)            size.setHeight(pm.height());    }    qreal scale = 1.0;    QPaintDevice *pdev = doc->documentLayout()->paintDevice();    if (pdev) {        extern int qt_defaultDpi();        if (pm.isNull())            pm = getPixmap(doc, format);        if (!pm.isNull())            scale = qreal(pdev->logicalDpiY()) / qreal(qt_defaultDpi());    }    size *= scale;    return size;}QTextImageHandler::QTextImageHandler(QObject *parent)    : QObject(parent){}QSizeF QTextImageHandler::intrinsicSize(QTextDocument *doc, int posInDocument, const QTextFormat &format){    Q_UNUSED(posInDocument)    const QTextImageFormat imageFormat = format.toImageFormat();    return getPixmapSize(doc, imageFormat);}void QTextImageHandler::drawObject(QPainter *p, const QRectF &rect, QTextDocument *doc, int posInDocument, const QTextFormat &format){    Q_UNUSED(posInDocument)    const QTextImageFormat imageFormat = format.toImageFormat();    const QPixmap pixmap = getPixmap(doc, imageFormat);    p->drawPixmap(rect, pixmap, pixmap.rect());}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -