QXcbConnection:尝试使用 Qt Creator 调试 Linux 应用程序时无法连接到显示器

QXcbConnection: Could not connect to display, when trying to debug Linux app with Qt Creator

我正在尝试将使用 Qt Creator 构建的一组 Windows 应用程序移植到 Linux。我已经使用 VirtualBox 在 64 位 Ubuntu 16.04 虚拟机中安装了基于 Qt 5.7.0 的 Qt Creator 4.0.2。主机 PC 是 64 位 Windows 7 Professional。

我已经成功构建了一个应用程序项目,现在我正在尝试调试它。如果我尝试使用 F5 开始调试,Qt 坚持尝试编译尚未编译的项目之一,因此我使用 "Start and Debug External Application...".

应用程序立即在 main() 中崩溃:

QApplication app(argc, argv);

出现错误:QXcbConnection:无法连接到显示器。

如果我 运行 来自终端 window 的可执行文件,则会显示 UI 并且应用程序正常运行。

我需要做什么才能使用 Qt 调试 UI 应用程序。

事实证明,我所要做的就是选中 "Start Debugger" 对话框中的 "Run in terminal:" 复选框 window。

当您在设备本身的 X11 系统中部署您的应用程序并 运行 它时,您会发现它可以工作,因为在这里它可以访问 DISPLAY 环境变量(简单地说) 告诉它在哪里显示自己。此环境变量已在您的 X 会话中进一步设置在进程树上。

当您通过调试器启动程序时,Qt Creator 正在连接到远程设备(通过您在 工具 > 选项 > 设备 中的设置)和 运行通过 ssh 连接程序。在这种情况下,您的程序不再知道在哪里显示自己,因为显然它不能在 ssh 中显示。它在您指定的线路上出错,因为这是 XCB 子系统试图确定为此目的连接到哪个 X-Server 的地方。

所以回答你的问题:远程调试时需要手动提供DISPLAY环境变量

一个简单的测试方法是转到 项目模式 ,找到您用于为远程设备构建的工具包,然后 select 运行 设置。在此之下,您应该找到一个 运行 Environment 部分。在这里您可以添加一个名为 DISPLAY 的新变量,并将其值设置为您 运行 正在使用的显示器的标识符(我猜您会想要 :0.0,表示第一个本地主机上的可用屏幕,尽管您应该阅读有关 DISPLAY 变量的信息,例如 here or here).

一个长期的、可能更好的解决方案是在您的套件设置中设置相同的变量(工具 > 选项 > 构建和 运行 > 套件 > 环境).这将适用于您使用它创建的未来程序。