QT5.15.2加载pdf为QGraphicsScene的背景

5.15.2使用pdf

必须要安装QT源码,可以看到编译器lib目录已经有pdf相关的lib文件,d是debug

1.找到源码目录:D:\soft\QT\5.15.2\Src\qtwebengine\include

复制这两个文件夹到编译器的包含目录中:D:\soft\QT\5.15.2\msvc2019_64\include

2.找到D:\soft\QT\5.15.2\Src\qtwebengine\src\pdf\api目录,将目录下的文件夹全部复制替换到D:\soft\QT\5.15.2\msvc2019_64\include\QtPdf中。

3.将D:\soft\QT\5.15.2\Src\qtwebengine\src\pdfwidgets以下文件复制替换到到D:\soft\QT\5.15.2\msvc2019_64\include\QtPdfWidgets中

4.修改pro文件,不用加入附加包含目录,只需要加入附加库目录和lib名称即可

cpp 复制代码
LIBS += -LD:/soft/Qt/5.15.2/msvc2019_64/lib

CONFIG(debug, debug|release){
    LIBS += -lQt5Pdfd
    LIBS += -lQt5PdfWidgetsd
}
else
{
    LIBS += -lQt5Pdf
    LIBS += -lQt5PdfWidgets
}

5.测试

cpp 复制代码
#include <QApplication>
#include <QtPdf/QPdfDocument>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QPdfDocument *doc = new QPdfDocument;
    doc->load("D:/1.pdf");
    QSizeF pageSize = doc->pageSize(0);
    QImage image = doc->render(0,pageSize.toSize());
    image.save("D:/1.png");
    return a.exec();
}

加载pdf为QGraphicsScene的背景

cpp 复制代码
#include <QApplication>
#include <QtPdf/QPdfDocument>
#include <QGraphicsScene>
#include <QGraphicsView>
class MyQGraphicsScene:public QGraphicsScene
{
public:
    MyQGraphicsScene(QObject *parent = nullptr):QGraphicsScene(parent)
    {
        doc = new QPdfDocument(this);
    }
    void drawBackground(QPainter *painter, const QRectF &rect) override
    {
        doc->load("D:/1.pdf");
        QSizeF pageSize = doc->pageSize(0);
        QImage image = doc->render(0,pageSize.toSize());
        painter->setPen(Qt::blue);
        painter->setBrush(image);
        painter->drawRect(sceneRect());
    }

private:
    QPdfDocument *doc = nullptr;
};

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

    // 创建自定义场景
    MyQGraphicsScene *scene = new MyQGraphicsScene();
    scene->setSceneRect(0,0,500,400);
    // 创建视图,并设置场景
    QGraphicsView *view = new QGraphicsView(scene);
    view->setFixedSize(800,600);
    view->show();
    return a.exec();
}

重写QGraphicsScene的drawBackground方法即可达到目的

相关推荐
云中飞鸿4 小时前
VS2015安装后,安装QT59,之后安装qt-vsaddin-msvc2015-2.4.3.vsix 文件失败问题!
开发语言·qt
CHANG_THE_WORLD5 小时前
PDF文档结构分析 一
前端·pdf
凯子坚持 c5 小时前
Qt常用控件指南(9)
开发语言·qt
开开心心_Every6 小时前
Win10/Win11版本一键切换工具
linux·运维·服务器·edge·pdf·web3·共识算法
创客小邓7 小时前
Qt对SQLite数据库的操作
数据库·qt·sqlite
小小码农Come on8 小时前
QT布局介绍
开发语言·qt
云中飞鸿8 小时前
QTCreator error: C3861: “_mm_loadu_si64”: 找不到标识符
qt
CodeByV8 小时前
【Qt】信号与槽
开发语言·qt
枫叶丹48 小时前
【Qt开发】Qt系统(十一)-> Qt 音频
c语言·开发语言·c++·qt·音视频
kiss strong9 小时前
springboot替换word模板&加入二维码&加水印&转为pdf
spring boot·后端·pdf