【问题标题】:QXcbConnection: Could not connect to display, when trying to debug Linux app with Qt CreatorQXcbConnection:尝试使用 Qt Creator 调试 Linux 应用程序时无法连接到显示器
【发布时间】:2016-09-13 20:08:19
【问题描述】:

我正在尝试将一组使用 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 坚持尝试编译尚未编译的项目之一,因此我使用“启动并调试外部应用程序...”。

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

QApplication app(argc, argv);

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

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

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

【问题讨论】:

    标签: qt-creator ubuntu-16.04


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
    • 要点——我已经把我的答案贴在这里了。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-10
      • 1970-01-01
      • 2013-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多