我正在使用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是不可能的。
答案 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
:
--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}}函数来检查鼠标是否在其中。您可能需要缩放路径以适合图像的大小。