我正在使用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不可能。
使用qpainterpath构建每个国家的形状。您可以使用moveto()和lineto()来执行此操作。一旦拥有此功能,使其成为自定义Qquickitem的成员变量 - 我们称其为CountryItem
。您可以通过CountryMapModule
暴露于QML之后将图像作为该项目的孩子。
import CountryMapModule 1.0
CountryItem {
implicitWidth: mapImage.implicitWidth
implicitHeight: mapImage.implicitHeight
Image {
id: mapImage
source: ":/images/australia.png"
}
}
覆盖Qquickitem :: mousemoveevent()允许该项目检查鼠标运动。然后可以使用QPainterPath
的contains()函数来检查鼠标是否在其中。您可能需要缩放适合图像大小的路径。