Qt 5.1没有显示器的Q应用程序-QXcbConnection:无法连接到显示器

Qt 5.1 QApplication Without Display - QXcbConnection: Could not connect to display

本文关键字:显示器 -QXcbConnection 连接 应用程序 Qt      更新时间:2023-10-16

我正在使用Qt5.1,并试图创建一个没有显示的QApplication。我需要用QPainter绘制文本,所以我需要使用QApplication(或QGuiApplication),否则我会得到一个segfault。

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

"QXcbConnection:无法连接到显示器"。

在Qt4.8中,我能够使用以下带有GUIenabled=false的构造函数来创建一个不需要显示的QApplication:

QApplication::QApplication(int&argc,char**argv,bool GUI启用)

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

我简要地扫描了源代码,在QApplication构造函数中似乎确实有一个标志,但没有记录该标志中可以使用的选项。使用"false"无效。

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

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

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

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

刚刚遇到了同样的问题。真的很烦人,至少它不是一个编译错误。我的解决方案只是使用指针和堆对象,比如

   QCoreApplication* app = 0;
   
   Display* display = XOpenDisplay(NULL);
   if (display)
   {  
      XCloseDisplay(display);
      app = new QApplication(argc, argv);
      qobject_cast<QApplication*>(app)->setQuitOnLastWindowClosed(false);
   }
   else
   {  
      app = new QCoreApplication(argc, argv);
   }
   return app->exec();