You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用QML获取屏幕全局鼠标位置而非应用内位置?

解决QML获取真实全局鼠标位置的问题

你的代码里用mainMouseArea.mouseX/mouseY拿到的是当前窗口内的相对坐标,即便窗口全屏,一旦系统开启高DPI缩放(比如125%、150%),QML的逻辑坐标就会和真实屏幕像素坐标不匹配。要获取全局真实鼠标位置,有两个可靠方案:

方案一:直接获取系统全局鼠标坐标

使用Qt.input.mouseX和Qt.input.mouseY,这两个属性直接返回系统层面的全局鼠标位置,不受窗口和DPI缩放影响,是最简便的方法。修改后的代码如下:

Window {
    id: root
    color: transparentColor
    visibility: ApplicationWindow.FullScreen
    flags: Qt.FramelessWindowHint

    MouseArea {
        id: mainMouseArea
        anchors.fill: parent
        hoverEnabled: true

        onPositionChanged: {
            mouseCoordinatesText.x = Qt.input.mouseX + 10;
            mouseCoordinatesText.y = Qt.input.mouseY + 10;
        }
    }

    Text {
        id: mouseCoordinatesText
        text: "Mouse Coordinates: (" + Math.floor(Qt.input.mouseX) + ", " + Math.floor(Qt.input.mouseY) + ")"
        color: "white"
        visible: true
    }
}

方案二:修正DPI缩放带来的坐标偏差

如果你坚持使用窗口内的鼠标坐标,需要乘以当前屏幕的设备像素比(Screen.devicePixelRatio),把QML逻辑坐标转换成真实屏幕像素坐标:

Text {
    id: mouseCoordinatesText
    text: "Mouse Coordinates: (" 
          + Math.floor(mainMouseArea.mouseX * Screen.devicePixelRatio) 
          + ", " 
          + Math.floor(mainMouseArea.mouseY * Screen.devicePixelRatio) 
          + ")"
    color: "white"
    visible: true
}

这个方案仅适用于窗口完全覆盖目标屏幕的场景,通用性不如方案一。

内容的提问来源于stack exchange,提问作者Jun long Liu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 06:52:52