繁体   English   中英

如何在无头模式下运行 Qt 应用程序(不显示我的 GUI)

[英]How to run a Qt application in headless mode (without showing my GUI)

我有一个基于QApplication的 QT 应用程序,并假设我的应用程序具有复杂的 GUI( QDialogQMainWindow ...)。

我的应用程序可以以两种模式运行:

  • 带图形用户界面
  • 在无头模式下

我想知道如何以无头模式启动应用程序(也就是说没有 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();
}

这里有几个选项。 您要么需要 Qt 控制台应用程序,要么需要无头 GUI 应用程序。

你会发现真正在无头模式下运行 GUI 相当棘手。 这适用于您需要在没有安装 GUI 库的 Linux 系统中运行相同应用程序的情况,例如最小设置。 如果没有广泛的 xorg 和/或 EGL 库,您会发现这是不可能的。

但不要害怕,您可以通过使用 Qt VNC 平台插件或在Xvfb的帮助下以最小的影响做到这一点。 所以简而言之

解决方案 1:使用 Qt 的 VNC 插件隐藏它

$ QT_QPA_PLATFORM="vnc"  ./my-app

$ ./my-app -platform vnc

你会发现你的软件有一个 GUI,但它在无头模式下运行,为了查看你只需使用任何 vncviewer 连接到它的 GUI。

解决方案 2:避免依赖 Qt 的 VNC 插件

与其他解决方案相同,您可以通过不显示 GUI 来隐藏它。

解决方案 3:使用屏幕外渲染来取消渲染

这与 VNC 非常相似,但你会得到一个完全 null output,无法进行 GUI 交互:

$ ./my-app -platform offscreen

解决方案 4:运行 Xvfb 并在那里启动它

你可以运行一个假的 Xorg 服务器并在那里运行东西。

export DISPLAY=:1
Xvfb :1 -screen 0 1024x768x16 &
./myapp &

从给定的解决方案中,我更喜欢屏幕外渲染,但是您的 Qt 编译可能没有插件,或者它可能需要 xcb 或 egl 库。 这是你的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM