检测当鼠标光标在Qt5和QML中的不规则形状图像上时

时间:2015-05-09 17:05:37

标签: qt qml qt5

我正在使用Qt5和QML(QtCreator和C ++)开发一个小应用程序。

我想显示一个包含国家/地区的地图,当用户将鼠标移到某个国家/地区时,我想更改该国家/地区的颜色,认为这很容易,并且所有国家/地区都是矩形。

    Image {
    id: mycountry
    width: 250
    height: 250
    source: "images/myCountry_gray.png"

    MouseArea {
        anchors.fill: parent
        hoverEnabled : true
        onEntered: {
            region.source = "images/myCountry_red.png"
        }
        onExited: {
            region.source = "images/myCountry_gray.png"
        }
    }
}

不幸的是,国家的形状不规则,我只希望当鼠标光标在其边界内时突出显示该国家

你知道如何开发它吗?我认为单凭QML是不可能的。

1 个答案:

答案 0 :(得分:4)

使用QPainterPath构建每个国家/地区的形状。您可以使用moveTo()lineTo()执行此操作。完成后,将其设为自定义QQuickItem的成员变量 - 让我们称之为import CountryMapModule 1.0 CountryItem { implicitWidth: mapImage.implicitWidth implicitHeight: mapImage.implicitHeight Image { id: mapImage source: ":/images/australia.png" } } 。在通过QPainterPath

将图像暴露给QML后,您可以将图像作为此项目的子图像
--disable-web-security

覆盖QQuickItem::mouseMoveEvent()以允许该项目检查鼠标移动。然后可以使用fit <- kmeans(df, 4, iter.max=1000, nstart=25) palette(alpha(brewer.pal(9,'Set1'), 0.5)) plot(df, col=fit$clust, pch=16) aggregate(df, by=list(fit$cluster), FUN=mean) clust.out <- fit$cluster df1 <- data.frame(df, fit$cluster) 的{​​{3}}函数来检查鼠标是否在其中。您可能需要缩放路径以适合图像的大小。