【问题标题】:Qt 5.1 QApplication Without Display - QXcbConnection: Could not connect to displayQt 5.1 没有显示的 QApplication - QXcbConnection:无法连接到显示
【发布时间】:2013-08-01 11:57:31
【问题描述】:

我正在使用 Qt5.1,我正在尝试创建一个没有显示的 QApplication。我需要用 QPainter 绘制文本,所以我需要使用 QApplication(或 QGuiApplication),否则会出现段错误。

该应用程序在 Qt4.8 中运行良好,但在 Qt5.1 中在无头版本的 Ubuntu 中失败并出现以下错误:

“QXcbConnection:无法连接到显示器”。

在 Qt 4.8 中,我能够使用 GUIenabled = false 的以下构造函数来创建不需要显示的 QApplication:

QApplication::QApplication (int & argc, char ** argv, bool GUIenabled)

在 Qt5.1 中,QApplication 的构造函数不再具有 GUIenabled 标志。

我简单地扫描了源代码,在 QApplication 构造函数中似乎确实有一个标志,但没有记录到该标志中可以使用哪些选项。使用“false”不起作用。

如何创建没有显示的 QApplication?是否有其他方法可以告诉 QApplication GUIenabled = false?或者,我可以创建一个在 QImage 上使用 QPainter 绘制文本时不会出现段错误的 QCoreApplication 吗?

【问题讨论】:

  • 我在删除 /tmp 中的文件后遇到了这个问题。

标签: c++ qt qt5


【解决方案1】:

是的,这是 Qt 3 (?) 在 Qt 5 中没有的东西。尝试使用 -platform offscreen 命令行选项运行您的应用程序。

请注意,您不需要QApplication 或链接到QtWidgets,只需使用QImage,使用QGuiApplication(并链接到QtGui)就足够了。

【讨论】:

  • 使用QGuiApplication-platform offscreen 命令行选项,我得到错误:Failed to load platform plugin "offscreen". Available platforms are: xcb 我从源代码静态编译Qt。是这个问题吗?
  • 我设法让-platform offscreen 工作,但后来我收到错误QFontDatabase: Cannot find font directory '/***/lib/fonts' - is Qt installed correctly?。我尝试了-platform minimal,但出现了同样的错误。
  • 这听起来像是您的构建中的问题,或者 Qt 中的错误。尝试将 QT_QPA_FONTDIR 环境变量设置为该目录的正确路径。我猜offscreen 插件并没有完全使用 fontconfig...
  • 此解决方案在尝试在运行无头 linux 的 Jenkins 服务器上对 Qt GUI 进行 QTest 时很有用。
  • 使用make check TESTARGS="-platform offscreen" 运行QTest,并从QtCreator 为您放入的.pro 项目文件中删除QT -= gui
【解决方案2】:

如果你想创建一个没有GUI的应用,你需要使用QCoreApplication而不是QApplication

【讨论】:

  • 我无法使用 QCoreApplication,因为我需要使用 QPainter 绘制文本。如果我使用 QCoreApplication,当我尝试在 QImage 中绘制文本时会出现分段错误,因此我需要使用 QApplication 或 QGuiApplication。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-10
  • 2017-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多