QGuiApplication没有显示使用QPainter和QPdfWriter

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QGuiApplication没有显示使用QPainter和QPdfWriter相关的知识,希望对你有一定的参考价值。

我正在编写一个Qt程序,打算在没有显示器的情况下运行,并生成PDF文件。对于PDF编写,我正在使用带有QPainter对象的QPdfWriter类。我已经开发了我的程序的PDF写作部分,并且一切都很好(我能够绘制线条/文本/图像没问题)。我的问题是让程序在没有显示的情况下运行并让QPainter绘制文本。

最初我使用的是QApplication对象,但是当没有显示器运行时,我会得到以下输出:

QXcbConnection: Could not connect to display

我了解到我必须使用QGuiApplication对象,并传入参数-platform offscreen来修复显示问题。但是当我传递-platform offscreen的参数时,我会松开QPainter使用的字体并得到以下输出:

QFontDatabase: Cannot find font directory C:/Qt/5.9.2/msvc2013_64/lib/fonts.
Note that Qt no longer ships fonts. Deploy some (from http://dejavu-fonts.org for example) or switch to fontconfig.

我去了dejavu网站并下载了可用的字体,我现在正在使用以下字体加载字体:

QFontDatabase::addApplicationFont("C:/Users/username/Downloads/dejavu-fonts-ttf-2.37/ttf/DejaVuSans.ttf");

现在我的PDF生成工作,并能够使用手动加载的字体。我的问题是我仍然得到错误打印输出“QFontDatabase:找不到字体......”。这很烦人,好像我已经加载了一些字体,一切正常。所以我的问题是:有没有办法关闭此警告?

答案

把这一行放到你的main()的开头,以摆脱警告:

qputenv("QT_QPA_FONTDIR", "C:/Users/username/Downloads/dejavu-fonts-ttf-2.37/ttf");

以上是关于QGuiApplication没有显示使用QPainter和QPdfWriter的主要内容,如果未能解决你的问题,请参考以下文章

QObject 子类未检测到 QGuiApplication 事件循环

Pyside2 QGuiApplication,Gui冻结按钮点击

如何在使用 Qt.quit() 而不是整个 QGuiApplication 时只退出当前的 QQmlApplicationEngine?

libtorrent-rasterbar 和 QGuiApplication 导致内存损坏

如何在 QML 文件中直接监听 QGuiApplication::applicationStateChanged 信号

使用 Qt 5.3 或 Qt 5.4(但不是 Qt 5.2)编译时,QGuiApplication 在手机锁定时停止事件循环