首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QML中窗口管理器调整窗口大小时如何获得信号?

QML中窗口管理器调整窗口大小时如何获得信号?
EN

Stack Overflow用户
提问于 2019-05-22 08:55:41
回答 4查看 3.8K关注 0票数 6

当在iTunes上进行调整时,我试图实现与miniPlayer类似的效果。也就是说,检测窗口的大小调整何时完成,然后将高度更改为某个值。下面是一个直观的例子:

问题是,QML窗口中没有信号在窗口管理器进行调整大小(即用户释放句柄)时通知我。因此,如果我没有一个信号,并应用我的高度变化,一旦改变宽度或高度在调整大小时,窗口会闪烁(双倍大小发生),只要用户没有释放手柄。

感谢您的任何意见或帮助!

EN

Stack Overflow用户

发布于 2020-08-04 20:36:19

您似乎希望QML发送两种不同的信号类型,一种是标记大小调整的开始和结束,另一种是在调整大小时标记大小的变化。然后,事件序列将如下所示:

代码语言:javascript
复制
window.resizeStarted() // hypothetical new event

window.widthChanged()
window.heightChanged()
window.widthChanged()
window.heightChanged()
...

window.resizeEnded()   // hypothetical new event

在Qt中,这显然是不可能的,但是您应该能够使用这种方法实现它,它最初的目的是在调整大小的同时根本不重新绘制窗口:

过滤相关事件,直到鼠标按钮被释放。具体来说,当鼠标按下按钮时,“吃掉”调整大小的事件,然后在鼠标释放后合成最终的调整大小事件。您可以在附加到显示QML接口的窗口/小部件对象的事件过滤器中完成这一切。(source)

这一过程将与引文中的程序非常相似:

  1. 使用自定义信号扩展QML窗口类型: //MyWindow.qml窗口{信号resizeStarted()信号resizeEnded() }
  2. 在QML窗口上创建一个事件过滤器,“吃掉”所有窗口调整大小的事件。当它遇到第一个,它发送resizeStarted()。然后转发窗口调整大小的事件。当它在调整大小时遇到鼠标释放事件时,它会在上一个widthChanged() / heightChanged()事件之后发送widthChanged()
  3. 在QML中实现相应的信号处理程序onResizeEnded以作出反应,在这里使应用程序窗口的高度适应某个固定值。

对我来说,这似乎是一条很有前途的路,但请注意,到目前为止,我还没有在代码中尝试过。

票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56252936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档