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

时间:2016-09-13 20:08:19

标签: qt-creator ubuntu-16.04

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

我已经成功构建了一个应用程序项目,现在我正在尝试调试它。如果我尝试用F5开始调试,Qt坚持尝试编译其中一个尚未编译的项目,所以我使用“启动和调试外部应用程序......”。

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

QApplication app(argc, argv);

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

如果我从终端窗口运行可执行文件,则会显示UI并且应用程序正常运行。

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

2 个答案:

答案 0 :(得分:1)

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

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

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

测试方法的一种简单方法是转到项目模式,找到用于为远程设备构建的工具包,然后选择运行设置。在此下,您应找到运行环境部分。在这里,您可以添加一个名为DISPLAY的新变量,并将其值设置为您正在运行的显示的标识符(我猜测您想要:0.0,表示第一个可用虽然您应该阅读有关DISPLAY变量的信息,例如herehere)。

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

答案 1 :(得分:0)

事实证明,我所要做的就是检查"在终端中运行:" "启动调试器"中的复选框对话窗口。