Qt4からQt5になって気になった動作の変化についてです。
どっちが本来の仕様かはわからないのですが。知ってる方いたら教えて下さい。
Qt5の方が本来の動きな気がしますが。。。
Qt4のときは、opacityが0厳密には0.001未満のとき設定したエレメントとその中にあるエレメントは無いことになってMouseAreaエレメントなどが配置してあっても「無視」されました。
Qt5では、単純に見えないだけで無視されなくなりました。Qt5でQt4の頃のような動作にしたいときは、enabled: falseとする必要があります。
それだけなんですけどね。
なので以下のサンプルをQt4(qmlviewer)とQt5(qmlscene)で実行すると差がわかると思います。
Qt4で実行すると「click rect 1」とコンソールに出力されます。
Qt5で実行すると「click rect 2」とコンソールに出力されます。
import QtQuick 2.0
//import QtQuick 1.0
Rectangle {
id: root
width: 360
height: 360
Rectangle{
anchors.fill: parent
color: "red"
MouseArea{
anchors.fill: parent
onClicked: {
console.debug("click rect 1");
}
}
}
Rectangle{
anchors.fill: parent
color: "blue"
opacity: 0
MouseArea{
anchors.fill: parent
onClicked: {
console.debug("click rect 2");
}
}
}
}
rainbow.lorry
これではないでしょうか。
Allow mouse interaction with 0 opacity items in QML2.
https://bugreports.qt-project.org/browse/QTBUG-19193