Pat*_*RIA 3 c++ qt command-line qt5 qapplication
我有一个基于 a 的 QT 应用程序QApplication,假设我的应用程序有一个复杂的 GUI(QDialog,QMainWindow...)。
我的应用程序可以以两种模式运行:
我想知道如何在无头模式下启动应用程序(也就是说没有 GUI 可见)
从下面的非常基本的代码来看,我必须有什么论据才能允许这样做?
int main(int argc, char*argv[])
{
QApplication app(argc, argv);
// which option should I add to argv to run in headless mode
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)
这里有几个选项。您要么需要 Qt 控制台应用程序,要么需要无头 GUI 应用程序。
您会发现真正在无头模式下运行 GUI 相当棘手。这适用于您需要在没有安装 GUI 库的 Linux 系统中运行完全相同的应用程序的情况,例如最小设置。如果没有大量的 xorg 和/或 EGL 库,您会发现这是不可能的。
但不用担心,您可以使用 Qt VNC 平台插件或在Xvfb的帮助下以最小的影响完成此任务。简而言之
$ QT_QPA_PLATFORM="vnc" ./my-app
Run Code Online (Sandbox Code Playgroud)
它是一样的
$ ./my-app -platform vnc
Run Code Online (Sandbox Code Playgroud)
您会发现您的软件有一个 GUI,但它在无头模式下运行,为了查看 GUI,您只需使用任何 vncviewer 连接到它即可。
与其他解决方案相同,您可以通过不显示 GUI 来隐藏它。
这与 VNC 非常相似,但你会得到完全空的输出,无法进行 GUI 交互:
$ ./my-app -platform offscreen
Run Code Online (Sandbox Code Playgroud)
你可以运行一个假的 Xorg 服务器并在那里运行东西。
export DISPLAY=:1
Xvfb :1 -screen 0 1024x768x16 &
./myapp &
Run Code Online (Sandbox Code Playgroud)
从给定的解决方案中,我更喜欢离屏渲染,但您的 Qt 编译可能没有该插件,或者可能需要 xcb 或 egl 库。这是你的选择。