У меня есть пользовательский элемент управления под названием customContextMenu.qml
, который имеет изображение и метку в каждой строке. Я хочу обработать щелчок / прикосновение к этому изображению и подписать его вместе. Как мне это сделать?
В настоящее время я добавляю onTouch()
в каждом контейнере, содержащем изображение и этикетку, но это не работает. Я использую это customContextMenu
контроль в моем main.qml
,
Container {
id: testPageCustomMBoxContainer
objectName: "testPageCustomMBoxContainer"
background:dropdownBack.imagePaint
attachedObjects: [
ImagePaintDefinition {
id: dropdownBack
repeatPattern: RepeatPattern.Fill
imageSource: "asset:///images/dropdown_bg.png"}
]
layout: StackLayout {
orientation: LayoutOrientation.TopToBottom
}
maxWidth: 200.0
maxHeight: 180.0
horizontalAlignment: HorizontalAlignment.Right
verticalAlignment: VerticalAlignment.Top
Container {
id: testPageCustomMBoxRetestContainer
objectName: "testPageCustomMBoxRetestContainer"
preferredWidth:200.0
preferredHeight:90.0
layout: StackLayout {
orientation: LayoutOrientation.LeftToRight
}
leftPadding: 10.0
topPadding: 10.0
bottomPadding: 10.0
rightPadding: 20.0
ImageView {
imageSource: "asset:///images/retest.png"scalingMethod: ScalingMethod.AspectFit
verticalAlignment: VerticalAlignment.Center
layoutProperties: StackLayoutProperties {
spaceQuota: 1.0
}
}
Label {
text: "Retest"horizontalAlignment: HorizontalAlignment.Right
verticalAlignment: VerticalAlignment.Center
textFormat: TextFormat.Plain
layoutProperties: StackLayoutProperties {
spaceQuota: 3.0
}
}
onTouch: {
var retestPage = retestPage.createObject();
testNavigationPane.push(retestPage);
}
attachedObjects: [
ComponentDefinition {
id:retestPage
source: "main.qml"}
]
}
Container {
id: testPageCustomMBoxHelpContainer
objectName: "testPageCustomMBoxHelpContainer"
preferredWidth: 200.0
preferredHeight: 90.0
layout: StackLayout {
orientation: LayoutOrientation.LeftToRight
}
leftPadding: 10.0
topPadding: 5.0
bottomPadding: 15.0
rightPadding: 20.0
ImageView {
imageSource: "asset:///images/help.png"scalingMethod: ScalingMethod.AspectFit
verticalAlignment: VerticalAlignment.Center
layoutProperties: StackLayoutProperties {
spaceQuota: 1.0
}
}
Label {
text: "Help"horizontalAlignment: HorizontalAlignment.Right
verticalAlignment: VerticalAlignment.Center
textFormat: TextFormat.Plain
layoutProperties: StackLayoutProperties {
spaceQuota: 3.0
}
onTouch: {
var helpPage = helpPage.createObject();
testNavigationPane.push(helpPage);
}
attachedObjects: [
ComponentDefinition {
id: helpPage
source: "helpPage.qml"Page {
paneProperties: NavigationPaneProperties {
backButton: ActionItem {
onTriggered: {
testNavigationPane.pop();
}
}
}
}
}
]
}
}
Вам нужно использовать обработчики жестов для таких вещей, как Touched или LongPressed. Событие onTouch будет использоваться только в том случае, если вы пытаетесь что-то сделать, пока пользователь удерживает палец или что-то подобное. Вот пример кода, чтобы показать различия между ними:
//Touched event - only fires if user touches and lets go of element.
//This is the preferred method
gestureHandlers: [
TapHandler {
onTapped: {
//Code goes here
}
}
]
//Display active image if touched
//This would be used for something such as changing a background color of a button when pressed.
onTouch: {
if (event.touchType == TouchType.Down) {
//Do something on down touch - e.g. change background color
} else if (event.touchType == TouchType.Up || event.touchType == TouchType.Cancel) {
//Users finger has been lifted OR has left the element.
}
}
Других решений пока нет …