То, что я пытаюсь сделать, - это иметь возможность перехватывать MouseArea.onPressAndHold в ListViewItems ListView, а перехватывать MouseArea.onPressAndHold в ПУСТОЙ области ListView (то есть в области под listViewItems, которая еще не имеет элементов).Размер Listview равен размеру экрана, который оставляет «пустую» область под ListViewItems, где пользователь может нажать и удерживать, чтобы получить всплывающее меню для выбора добавления другого элемента.
Пожалуйста, см.3 различных области мыши, протестированных ниже (mouseTestArea1, mouseTestArea2, mouseTestArea3).Обратите внимание, что только один был протестирован за один раз.Я также сделал несколько тестов с различными объектами распространения: {true |false] и mouse.accepted = [false |true].
Моя проблема в том, что я могу либо обнаружить MouseArea.onPressAndHold в ListViewItem, либо в ListView, но не в обоих.Есть идеи, как этого добиться?ListViewItem MouseArea «должен» быть «ontop» для ListA MouseArea, и область, которая не имеет ListViewItem, должна затем быть покрыта ListView MouseArea.Но это не тот случай.Если я использую "mouseTestArea3", то эта MouseArea переходит к ListViewItems MouseArea.Так что я в растерянности.Есть несколько сообщений, похожих на этот, но не совсем одинаковых.Некоторые из них, которые я нашел, близки к этому вопросу, но не имеют ответов, которые сработают.
Любая помощь будет принята с благодарностью, поскольку я зашел в тупик, и я уверен, что что-то упустил.
Приведенный ниже код несколько упрощен, поскольку он очень большой.
Item {
height: rectangleSwipeView.height
width: rectangleSwipeView.width
MouseArea {
id: mouseTestArea1
anchors.fill: parent
propagateComposedEvents: true
onPressAndHold: {
console.log("*********** ListView onPressAndHold!");
mouse.accepted = false;
}
}
ListView
{
id: deviceListView
anchors.fill: parent
model: _deviceManager.model
orientation: Qt.Vertical
MouseArea {
id: mouseTestArea2
anchors.fill: parent
propagateComposedEvents: true
onPressAndHold: {
console.log("*********** ListView onPressAndHold!");
mouse.accepted = false;
}
}
delegate: Component
{
id: listViewComponent
Loader
{
id: viewLoader
source: switch(model.device.technologytype)
{
case TechnologyType.Type1:
return "../../assets/ListViewItems/ListViewItem_DimmableDevice1.qml";
break;
case TechnologyType.Type2:
return "../../assets/ListViewItems/ListViewItem_DimmableDevice2.qml";
break;
}
asynchronous: true
visible: status == Loader.Ready
}
}
}
MouseArea {
id: mouseTestArea3
anchors.fill: parent
propagateComposedEvents: true
onPressAndHold: {
console.log("*********** ListView onPressAndHold!");
mouse.accepted = false;
}
}
}
//Example of Simplified ListViewItem ("ListViewItem_DimmableDevice1.qml"):
Item
{
id: root
height: 65
width: deviceListView.width
Item
{
id: itemDeviceValue
height: root.height
width: root.height
anchors.verticalCenter: parent.verticalCenter
anchors.horizontalCenter: parent.horizontalCenter
MouseArea {
id: mouseAreaListViewItem
anchors.fill: parent
//propagateComposedEvents: true
onPressAndHold: console.log("*********** ListViewItem onPressAndHold!");
}
}
}
Короче говоря, мне бы хотелось: mouseAreaListViewItem.onPressAndHold работать при длительном нажатии на этот элемент Item Box и mouseTestArea1, mouseTestArea2 ИЛИ mouseTestArea3 onPressAndHoldработать при длительном нажатии в «пустой» области в ListView, ниже ListViewItems.