我正在尝试将一组使用 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 应用程序。
当您部署应用程序并从设备本身的 X11 系统中运行它时,您会发现它可以工作,因为它可以访问DISPLAY
环境变量(简单地说)告诉它在哪里显示自己。该环境变量已在 X 会话中的进程树中进一步设置。
当您通过调试器启动程序时,Qt Creator 将连接到远程设备(通过您在工具 > 选项 > 设备),并通过 ssh 运行程序。在这种情况下,您的程序不再知道在哪里显示自己,因为显然它无法在 ssh 中显示。它在您指定的线路上出现故障,因为这是 XCB 子系统尝试确定为此目的连接到哪个 X-Server 的位置。
所以回答你的问题:您需要手动提供DISPLAY
远程调试时的环境变量。
测试这一点的一个简单方法是转到项目模式,找到您用于为远程设备构建的套件,然后选择Run设置。在此之下,您应该找到一个运行环境部分。在这里您可以添加一个名为的新变量DISPLAY
并将其值设置为您正在运行的显示器的标识符(我猜您会想要:0.0
,表示本地主机上的第一个可用屏幕,尽管您应该阅读有关 DISPLAY 变量的信息,例如here or here).
一个更长期、可能更好的解决方案是在您的套件设置中设置相同的变量(工具 > 选项 > 构建和运行 > 套件 > 环境)。这将适用于您使用它创建的未来程序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)