【问题标题】:QGuiApplication without display using QPainter and QPdfWriter使用 QPainter 和 QPdfWriter 不显示的 QGuiApplication
【发布时间】:2018-03-06 16:28:59
【问题描述】:

我正在编写一个 Qt 程序,该程序旨在在没有显示器的情况下运行,并将生成 PDF 文件。对于 PDF 写作,我将 QPdfWriter 类与 QPainter 对象一起使用。我已经开发了我的程序的 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:找不到字体......”。这很烦人,好像我已经加载了一些字体并且一切正常。所以我的问题是:有没有办法关闭这个警告?

【问题讨论】:

    标签: qt fonts


    【解决方案1】:

    将此行放在main() 的开头以消除警告:

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

    【讨论】:

    • 太好了,解决了。此外,作为遇到此问题的其他人的说明,当添加 @talamaki 解释的 qputenv 行时,不再需要使用 QFontDatabase::addApplicationFont 调用。 qputenv 行替换了addApplicationFont 行。
    猜你喜欢
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 2022-08-07
    • 2018-07-13
    • 1970-01-01
    相关资源
    最近更新 更多