如何禁用GUI以通过SSH运行修改后的GetThermal C++程序?
解决SSH远程运行无GUI适配后的GetThermal程序X显示问题
核心问题分析
你的程序虽然注释了GUI相关代码,但Qt项目默认会初始化GUI框架,只要构建配置里还链接了Qt的GUI/Widgets模块,程序启动时就会尝试连接X显示,和你是否写了GUI代码无关。
具体解决步骤
修改项目构建配置
找到项目的构建配置文件(CMakeLists.txt 或 .pro 文件):- 若用CMake:把
find_package(Qt5 REQUIRED COMPONENTS Widgets Gui)改为find_package(Qt5 REQUIRED COMPONENTS Core),同时将target_link_libraries(GetThermal Qt5::Widgets Qt5::Gui)替换为target_link_libraries(GetThermal Qt5::Core)(如果程序用到其他非GUI模块如Network可保留)。 - 若用qmake:把
QT += widgets gui改为QT += core。
- 若用CMake:把
替换程序入口类
打开main.cpp,把原来的QApplication app(argc, argv);改为QCoreApplication app(argc, argv);,同时确保代码中没有任何GUI控件(如QWidget、QMainWindow)的实例化或引用,彻底清理残留的GUI相关代码。清理构建缓存并重新编译
删除项目的build目录(避免旧缓存干扰),重新执行构建命令:rm -rf build && mkdir build && cd build cmake .. && make # 若用CMake # 或 qmake && make # 若用qmake备选方案(若需保留GUI模块处理图像)
如果程序需要用到Qt GUI模块的非显示功能(如QImage处理),可以强制Qt使用无显示平台插件:- 运行时加参数:
./GetThermal -platform offscreen - 或在main函数开头添加代码:
qputenv("QT_QPA_PLATFORM", "offscreen"); QCoreApplication app(argc, argv);
- 运行时加参数:
内容的提问来源于stack exchange,提问作者loxer
相关产品推荐
相关产品推荐

