我最近在我的开发笔记本上安装了Ubuntu22.04LTS。以前我跑了18.04,所以这是我第一次体验Wayland。我在一个新光盘上做了一个干净的安装。我在重新安装gitkraken和从github克隆源代码存储库方面遇到了相对较少的问题,但是当我开始安装Qt库时,这就是我的问题开始的地方。Qt网站上的在线安装程序根本无法运行。它只是默默地离开。我最终在Ubuntu18.04下载文件夹的备份中找到了在线安装程序可执行文件的旧版本,并能够使用它下载并安装与我以前使用的Qt库相同的版本(5.15.0)。这也是我在我的另一台运行Windows 10的开发机器上使用的版本。保持两者同步是很有用的,同时升级太多的东西就像是自找麻烦。我安装了Qt (7.0.1)和g++ (11.2.0)的最新版本。
然后我能够构建我的应用程序,在对堆栈溢出进行了简短的搜索之后,我在connection中的命令行参数设置中添加了"-platform wayland“,但是应用程序在启动时几乎立即崩溃,”Wayland连接发生了致命错误:协议错误“。
有几件事让我认为这可能是Qt库中的一个bug,而不是我的应用程序(没有一个是确定的!):
。
我下载了QT5.15.12(可用的最新Qt5版本),并根据它重新构建了我的应用程序,但结果是一样的。
下一步显然是将我的应用程序直接剥离到仍然显示问题的最低限度,但在此之前,我想知道这是否是其他人在将Qt5应用程序迁移到Wayland时遇到的问题,以及是否需要采取更大的步骤来升级到Qt6?Qt将Qt5.11描述为Wayland是“稳定的”。
发生错误时的调用堆栈如下所示:
非常感谢。
发布于 2022-06-01 21:00:48
这与QDialog::setMaximumSize有关。对setMaximumSize本身的调用不会崩溃,但是如果删除对它的所有调用,应用程序就会正常工作。有些控件在Wayland上主观上看起来更大,所以我想知道,如果QDialog内容的大小超过指定的最大大小,Wayland上的Qt5是否会崩溃。在切换到Wayland之前,这肯定不会在Windows上引起Qt 5的崩溃,在Ubuntu上也不会在Qt5中造成崩溃。我认为这是一个Qt错误,但当然,它很可能在稍后版本的Qt中修复,现在我知道原因了,这是一个很容易解决的问题。
我使用setMaximumSize来允许对话框在添加小部件时动态展开,但是阻止用户使窗口比需要的更大。layout()->setSizeConstraint(QLayout::SetFixedSize);实现了同样的功能。
https://stackoverflow.com/questions/72424478
复制相似问题