c++ - 当窗口管理器在 qt QML 中调整窗口大小时如何获得信号?
问题描述
在 macOS 上调整大小时,我试图达到与 iTunes 的 miniPlayer 类似的效果。也就是说,检测窗口的大小调整何时完成,然后将高度更改为某个值。这是一个视觉示例:
问题是当窗口管理器完成调整大小(即用户释放句柄)时,QML 窗口中不存在通知我的信号。因此,如果我没有信号并且在调整大小期间一旦更改宽度或高度就应用我的高度更改,只要用户没有释放句柄,窗口就会闪烁(发生双重调整大小)。
感谢您的任何意见或帮助!
解决方案
您可以很容易地实现自己的调整大小处理,使用 MouseArea 并使用 onReleased 处理最终的调整大小计算(这里强制高度为释放时宽度的 75%):
Window {
id: window
flags: Qt.FramelessWindowHint
visible: true
height: 300
width: 400
MouseArea {
id: resize
anchors {
right: parent.right
bottom: parent.bottom
}
width: 15
height: 15
cursorShape: Qt.SizeFDiagCursor
property point clickPos: "1,1"
onPressed: {
resize.clickPos = Qt.point(mouse.x,mouse.y)
}
onPositionChanged: {
var delta = Qt.point(mouse.x-resize.clickPos.x, mouse.y-resize.clickPos.y)
window.width += delta.x;
window.height += delta.y;
}
onReleased: {
window.height = .75 * window.width
}
Rectangle {
id: resizeHint
color: "red"
anchors.fill: resize
}
}
}
推荐阅读
- python-3.x - Google Cloud Speech-to-Text 非侵入式最终用户身份验证
- powershell - powershell中所有收集数据的输出逻辑
- javascript - 如何将 NodeJS 脚本连接到 ReactJS
- javascript - Firebase 云功能无法正确记录
- excel - 如何根据另一列中的值对列的一部分求和?
- python - RuntimeError:生成器引发 StopIteration
- apache-kafka - 当分区暂停并发生重新平衡时会发生什么?
- exception - 处理 ImageResizer.AzureReader2 (BlobNotFound) 抛出的 FileNotFoundException
- apache-spark - 在 Spark 中,如何在不重新分配的情况下重命名数据框的列名?
- php - 如何针对 XSS 验证 CakePHP 3 字段输入,同时允许文本输入的多种用途?