我正在使用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();