簡體   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