我正在实现窄的调整大小句柄,这给我带来了烦人的行为。当鼠标直接位于手柄上方时,光标形状符合预期,但是一旦开始拖动手柄,光标形状就会变得不一致。造成这种情况的原因有两个:
当光标快速移动并在手柄之前移动直到手柄“追上”(或当“fluid qml”太流畅时) - 这尤其令人讨厌,因为光标形状快速变化并闪烁
当光标移动到手柄允许的自由度之外时
我查了一下文档,但它似乎没有包含任何关于在按下新闻之前锁定光标的内容。
我还是设法找到一个黑客修复它-使用虚拟叠加MouseArea使用acceptedButtons: Qt.NoButton-这实际上有助于假光标的一致性,但有它自己的问题。拥有覆盖鼠标区域不允许光标在手柄上方时更改为调整大小的形状,因为手柄位于覆盖鼠标区域下方,因此根本无法修改光标形状。因此只有在单击手柄后才会开始调整大小形状,这远非理想。将覆盖鼠标区域设置为enabled: false不会改变这一点 - 它仍然会阻止来自底层鼠标区域的光标形状变化。也有一个解决方法,例如将覆盖鼠标区域大小设置为 0x0,但这有点难看。
理想情况下,光标形状应该持续到鼠标区域被按下,无论它是在其区域内还是在其区域外 - 毕竟,如果您离开它,则不会释放按下,因此鼠标区域仍然处于控制状态并且应该保持其光标形状。例如 - 窗口调整大小手柄保持调整大小形状,即使它被移动以将窗口调整为小于其最小尺寸,直到按下被释放。
在我看来,实现中似乎存在缺陷MouseArea- 按下时不保留光标形状,即使禁用鼠标区域,光标形状也会更改。
此问题发生在 Windows 上,但不会发生在 Linux 上。其他平台我没试过。
我有一个QCursor用于设置鼠标位置的自定义类(下面的代码)。
问题在于以下代码(repo):
import QtQuick 2.15
import QtQuick.Window 2.15
// Custom C++ class, implementation below
import io.github.myProject.utilities.mousehelper 1.0
Window {
visible: true
width: 800
height: 600
MouseHelper { id: mouseHelper }
MouseArea {
id: mouseArea
hoverEnabled: true
anchors.fill: parent
property var p
onPressed: {
p = mouseArea.mapToGlobal(
mouseArea.width * 0.5, mouseArea.height * 0.5);
mouseHelper.setCursorPosition(0, 0);
}
onReleased: {
mouseHelper.setCursorPosition(p.x, p.y);
}
onExited: {
console.log('This should happen twice, but it only happens once.'); …Run Code Online (Sandbox Code Playgroud)