c++ 与自定义Qt Wayland合成器通信

r7xajy2e  于 8个月前  发布在  其他
关注(0)|答案(1)|浏览(86)

我正在一个运行yocto的嵌入式系统上构建一个前端,并使用wayland进行窗口合成。
由于与线程、Qt和外部库相关的原因,应用程序被分成两部分。一个是显示Map的应用程序,另一个是显示控件覆盖的半透明应用程序。问题是后台应用程序需要更长的时间才能启动,因此在启动时处于前台。
我最初的计划是简单地设置“总是在顶部”的覆盖和完成它,但搜索和阅读已经导致我的事实,这是不是真正的事情在韦兰。
当前的解决方案是将前景窗口隐藏一秒钟,然后再次显示,这是可行的,但是前景窗口会以一种令人不快的方式 Flink 。
所有这些都促使我尝试创建自己的基于Qt's example code的合成器,创建一个具有固定分层顺序的合成器,而不管启动顺序或单击顺序如何。
现在我遇到了问题的核心:**我找不到一个合理的方法来识别我正在创建的窗口,以设置它们的分层顺序。**理想情况下,我想找到一个窗口标题或其他可复制的键,但Wayland似乎不支持这些东西的设计。
我已经开始尝试通过尺寸来识别窗口:将背景窗口设置为比前景宽一个像素。这似乎可以工作,但在创建视图/曲面时检查QWaylandCompositor(和相关)对象,两个尺寸都为-1。我发现它们在某个时候被设置为正确的尺寸,但这似乎很不好。
最理想的方法是在创建界面时从客户端发送一些元数据,告知窗口是否应该在顶部。我假设这可以使用扩展来实现,但我在网上找不到任何有价值的东西。
这可能吗?我是不是找错地方了?

nwlls2ji

nwlls2ji1#

我相信你正在寻找的是IVI Wayland shell 。IVI shell 根据你在应用程序启动前设置的环境变量来识别应用程序窗口。合成器将识别此ID并调整窗口大小,使其适合为此特定ID定义的预定义区域。
请在GitHub上查看Qt的IVI示例:https://github.com/qt/qtwayland/tree/dev/examples/wayland/ivi-compositor
韦斯顿合成器也有这个IVI shell的实现,您可以使用它,在这种情况下,您必须配置韦斯顿并定义这些区域。

相关问题