MouseArea QML Type
간단한 마우스 조작이 가능합니다. 더 보기...
Import Statement: | import QtQuick |
Inherits: |
속성
- acceptedButtons : Qt::MouseButtons
- containsMouse : bool
- containsPress : bool
- cursorShape : Qt::CursorShape
- drag
- drag.active : bool
- drag.axis : enumeration
- drag.filterChildren : bool
- drag.maximumX : real
- drag.maximumY : real
- drag.minimumX : real
- drag.minimumY : real
- drag.smoothed : bool
- drag.target : Item
- drag.threshold : real
- enabled : bool
- hoverEnabled : bool
- mouseX : real
- mouseY : real
- pressAndHoldInterval : int
- pressed : bool
- pressedButtons : MouseButtons
- preventStealing : bool
- propagateComposedEvents : bool
- scrollGestureEnabled : bool
신호
- canceled()
- clicked(MouseEvent mouse)
- doubleClicked(MouseEvent mouse)
- entered()
- exited()
- positionChanged(MouseEvent mouse)
- pressAndHold(MouseEvent mouse)
- pressed(MouseEvent mouse)
- released(MouseEvent mouse)
- wheel(WheelEvent wheel)
상세 설명
마우스 영역은 일반적으로 해당 항목에 마우스 처리를 제공하기 위해 보이는 항목과 함께 사용되는 보이지 않는 항목입니다. 프록시 역할을 효과적으로 수행함으로써 마우스 처리를 위한 로직을 MouseArea 항목에 포함할 수 있습니다.
enabled 속성은 프록시된 항목에 대한 마우스 처리를 활성화 및 비활성화하는 데 사용됩니다. 비활성화하면 마우스 영역이 마우스 이벤트에 투명해집니다.
MouseArea는 보이지 않는 항목이지만 표시 속성이 있습니다. false로 설정하면 마우스 영역이 마우스 이벤트에 투명해집니다.
pressed 읽기 전용 속성은 사용자가 마우스 영역 위에 마우스 버튼을 누르고 있는지 여부를 나타냅니다. 이 속성은 사용자 인터페이스에서 속성 간의 바인딩에 자주 사용됩니다. containsMouse 읽기 전용 속성은 마우스 영역 위에 마우스 커서가 있는지 여부를 나타내지만 기본적으로 마우스 버튼을 누르고 있을 때만 표시되며 자세한 내용은 containsMouse 설명서를 참조하세요.
마우스 위치 및 버튼 클릭에 대한 정보는 이벤트 핸들러 속성이 정의된 시그널을 통해 제공됩니다. 가장 일반적으로 사용되는 것은 마우스 누름 및 클릭 처리와 관련된 onClicked, onDoubleClicked, onPressed, onReleased 및 onPressAndHold입니다. 또한 onWheel 신호를 통해 마우스 휠 이벤트를 처리할 수도 있습니다.
마우스 영역이 다른 마우스 영역 항목의 영역과 겹치는 경우, propagateComposedEvents 을 true로 설정하고 전파해야 할 이벤트를 거부하여 clicked
, doubleClicked
및 pressAndHold
이벤트를 다른 항목에 전파하도록 선택할 수 있습니다. 자세한 내용은 propagateComposedEvents 문서를 참조하세요.
기본적으로 마우스 영역 항목은 마우스 클릭만 보고하고 마우스 커서 위치의 변경 사항은 보고하지 않습니다. hoverEnabled 속성을 설정하면 마우스 버튼을 누르지 않아도 onPositionChanged, onEntered 및 onExited에 대해 정의된 핸들러가 사용되며 containsMouse 속성이 업데이트됩니다.
사용 예시
다음 예시는 클릭 시 Rectangle 색상을 빨간색으로 변경하는 Rectangle 의 MouseArea를 사용합니다:
import QtQuick Rectangle { width: 100; height: 100 color: "green" MouseArea { anchors.fill: parent onClicked: { parent.color = 'red' } } }
많은 마우스 영역 신호는 위치, 버튼 및 키 수정자 등 마우스 이벤트에 대한 추가 정보가 포함된 mouse 매개 변수를 전달합니다.
다음은 영역을 마우스 오른쪽 버튼으로 클릭하면 다른 색상을 생성하는 이전 예제의 확장입니다:
Rectangle { width: 100; height: 100 color: "green" MouseArea { anchors.fill: parent acceptedButtons: Qt.LeftButton | Qt.RightButton onClicked: (mouse)=> { if (mouse.button == Qt.RightButton) parent.color = 'blue'; else parent.color = 'red'; } } }
MouseEvent, 마우스 영역 예제 및 Qt Quick - 사용자 입력의 중요 개념도참조하세요 .
속성 문서
이 속성은 마우스 커서의 좌표를 유지합니다.
hoverEnabled 속성이 거짓인 경우 이 속성은 버튼을 누르고 있는 동안에만 유효하며 마우스를 영역 밖으로 이동하더라도 버튼을 누르고 있는 동안에는 유효합니다.
기본적으로 이 속성은 거짓입니다.
hoverEnabled 가 참이면 이 속성은 다음과 같은 경우에 유효합니다:
- 버튼을 누르지 않았지만 마우스가 MouseArea 영역 내에 있는 경우(containsMouse 은 참입니다).
- 버튼을 누른 후 마우스가 영역 밖으로 이동했더라도 버튼을 누르고 있는 경우.
좌표는 MouseArea 을 기준으로 합니다.
acceptedButtons : Qt::MouseButtons |
이 속성은 마우스 영역이 반응하는 마우스 버튼을 보유합니다.
MouseArea 이 여러 버튼에 반응하도록 지정하려면 Qt::MouseButtons 플래그 값을 "|"(또는) 연산자를 사용하여 결합합니다:
MouseArea { acceptedButtons: Qt.LeftButton | Qt.RightButton }
가능한 모든 마우스 버튼을 허용하도록 지정하려면 특수 값 'Qt.AllButtons'를 사용할 수 있습니다:
MouseArea { acceptedButtons: Qt.AllButtons }
기본값은 Qt.LeftButton
입니다.
containsMouse : bool |
이 속성은 마우스가 현재 마우스 영역 안에 있는지 여부를 유지합니다.
경고: hoverEnabled 가 false
인 경우 마우스 커서가 MouseArea 안에 있는 상태에서 마우스를 누르면 containsMouse
는 true
가 됩니다. 그러나 onPressed
핸들러에서 mouse.accepted = false
를 설정하면 containsMouse
는 누름이 거부되었기 때문에 false
로 유지됩니다.
containsPress : bool |
이것은 pressed && containsMouse
과 동등한 편의 속성으로서, 현재 acceptedButtons 중 어느 것이 눌려 있고 마우스가 현재 MouseArea 안에 있는지 여부를 유지합니다.
이 속성은 마우스가 해당 범위 내에 있는 동안 항목을 강조 표시할 때 특히 유용합니다.
pressed 및 containsMouse도 참조하세요 .
cursorShape : Qt::CursorShape |
이 속성은 이 마우스 영역의 커서 모양을 유지합니다. 마우스 커서를 표시하지 않는 플랫폼에서는 이 속성이 효과가 없을 수 있습니다.
사용 가능한 커서 모양은 다음과 같습니다:
- Qt.ArrowCursor
- Qt.UpArrowCursor
- Qt.CrossCursor
- Qt.WaitCursor
- Qt.IBeamCursor
- Qt.SizeVerCursor
- Qt.SizeHorCursor
- Qt.SizeBDiagCursor
- Qt.SizeFDiagCursor
- Qt.SizeAllCursor
- Qt.BlankCursor
- Qt.SplitVCursor
- Qt.SplitHCursor
- Qt.PointingHandCursor
- Qt.ForbiddenCursor
- Qt.WhatsThisCursor
- Qt.BusyCursor
- Qt.OpenHandCursor
- Qt.ClosedHandCursor
- Qt.DragCopyCursor
- Qt.DragMoveCursor
- Qt.DragLinkCursor
마우스 이벤트에 반응하지 않고 영역에 대한 마우스 커서 모양만 설정하려면 acceptedButtons 을 없음으로 설정합니다:
MouseArea { cursorShape: Qt.IBeamCursor; acceptedButtons: Qt.NoButton }
기본값은 Qt.ArrowCursor
입니다.
참고: cursorShape
속성이 undefined
으로 설정되어 있으면 MouseArea
을 입력해도 기존 모양이 변경되지 않습니다.
Qt::CursorShape 를참조하세요 .
drag
는 항목을 드래그할 수 있게 만드는 편리한 방법을 제공합니다.
drag.target
드래그할 항목의 ID를 지정합니다.drag.active
대상 항목이 현재 드래그 중인지 여부를 지정합니다.drag.axis
드래그가 가로로(Drag.XAxis
), 세로로(Drag.YAxis
) 또는 둘 다(Drag.XAndYAxis
) 수행될 수 있는지 여부를 지정합니다.drag.minimum
와drag.maximum
는 해당 축을 따라 대상을 끌 수 있는 거리를 제한합니다.
다음 예제에서는 X축을 따라 끌 수 있는 Rectangle 을 표시합니다. 직사각형을 오른쪽으로 끌면 직사각형의 불투명도가 감소합니다.
Rectangle { id: container width: 600; height: 200 Rectangle { id: rect width: 50; height: 50 color: "red" opacity: (600.0 - rect.x) / 600 MouseArea { anchors.fill: parent drag.target: rect drag.axis: Drag.XAxis drag.minimumX: 0 drag.maximumX: container.width - rect.width } } }
참고: 항목이 요청된 drag.axis
에 고정되어 있으면 끌 수 없습니다. 예를 들어 위의 예에서 rect
에 anchors.left
또는 anchors.right
을 설정한 경우 X축을 따라 드래그할 수 없습니다. onPressed 핸들러에서 앵커 값을 undefined
로 설정하면 이를 방지할 수 있습니다.
drag.filterChildren
을 true로 설정하면 드래그가 하위 마우스 영역을 재정의할 수 있습니다. 이렇게 하면 예를 들어 부모 MouseArea 가 드래그를 처리하고 자손은 클릭을 처리할 수 있습니다:
import QtQuick Rectangle { width: 480 height: 320 Rectangle { x: 30; y: 30 width: 300; height: 240 color: "lightsteelblue" MouseArea { anchors.fill: parent drag.target: parent; drag.axis: "XAxis" drag.minimumX: 30 drag.maximumX: 150 drag.filterChildren: true Rectangle { color: "yellow" x: 50; y : 50 width: 100; height: 100 MouseArea { anchors.fill: parent onClicked: console.log("Clicked") } } } } }
drag.threshold
드래그 작업이 시작되어야 하는 시점의 임계값을 픽셀 단위로 결정합니다. 기본적으로 이 값은 플랫폼 종속 값에 바인딩됩니다. 이 속성은 Qt Quick 2.2에서 추가되었습니다.
drag.smoothed
이 true
인 경우 드래그 작업이 시작된 후에만 대상이 이동합니다. false
으로 설정하면 대상이 현재 마우스 위치로 바로 이동합니다. 기본적으로 이 속성은 true
입니다. 이 속성은 Qt Quick 2.4에서 추가되었습니다.
enabled : bool |
이 속성은 항목의 마우스 이벤트 수락 여부를 저장합니다.
참고: 역사적인 이유로 인해 이 속성은 Item.enabled와 동일하지 않습니다. 마우스 이벤트에만 영향을 미치며 그 효과는 하위 항목으로 전파되지 않습니다.
기본적으로 이 속성은 true입니다.
hoverEnabled : bool |
이 속성은 호버 이벤트 처리 여부를 보유합니다.
기본적으로 마우스 이벤트는 버튼 이벤트에 대한 응답 또는 버튼을 눌렀을 때만 처리됩니다. 호버를 사용하면 마우스 버튼을 누르지 않아도 모든 마우스 이벤트를 처리할 수 있습니다.
이 프로퍼티는 containsMouse 프로퍼티와 onEntered, onExited 및 onPositionChanged 신호에 영향을 줍니다.
pressAndHoldInterval : int |
이 속성은 pressAndHold
이벤트가 발생하기까지의 경과 시간(밀리초)을 재정의합니다.
명시적으로 설정되지 않았거나 재설정된 후 값은 QStyleHints::mousePressAndHoldInterval
을 따릅니다.
일반적으로 애플리케이션 스타일 힌트를 사용하여 이 속성을 전역적으로 설정하는 것으로 충분합니다. 특정 마우스 영역에 대해 다양한 간격이 필요한 경우 이 속성을 사용해야 합니다.
pressAndHold 를참조하세요 .
pressed : bool |
이 속성은 현재 acceptedButtons 중 어느 것이 눌려 있는지 여부를 저장합니다.
pressedButtons : MouseButtons |
이 속성은 현재 누르고 있는 마우스 버튼을 보유합니다.
여기에는 비트 단위의 조합이 포함됩니다:
- Qt.LeftButton
- Qt.RightButton
- Qt.MiddleButton
아래 코드는 마우스 오른쪽 버튼을 눌렀을 때 "오른쪽"을 표시합니다:
Text { text: mouseArea.pressedButtons & Qt.RightButton ? "right" : "" horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter MouseArea { id: mouseArea anchors.fill: parent acceptedButtons: Qt.LeftButton | Qt.RightButton } }
참고: 이 프로퍼티는 acceptedButtons 에 지정된 버튼만 처리합니다.
acceptedButtons 를참조하세요 .
preventStealing : bool |
이 속성은 마우스 이벤트가 이 MouseArea 에서 도용될 수 있는지 여부를 보유합니다.
Flickable과 같이 하위 마우스 이벤트를 필터링하는 항목 내에 MouseArea 이 있는 경우, 상위 항목에서 제스처(예: 플릭 제스처)를 인식하면 MouseArea 에서 마우스 이벤트가 도용될 수 있습니다. preventStealing을 true로 설정하면 어떤 항목도 마우스 이벤트를 훔치지 않습니다.
항목이 이벤트를 훔치기 시작한 후 preventStealing을 true로 설정하면 다음 프레스 이벤트가 발생할 때까지 아무런 영향을 미치지 않습니다.
기본적으로 이 속성은 false입니다.
propagateComposedEvents : bool |
이 속성은 구성된 마우스 이벤트가 이 MouseArea 와 겹치지만 시각적 스택 순서에서 더 낮은 다른 마우스 영역으로 자동으로 전파될지 여부를 보유합니다. 기본적으로 이 속성은 거짓입니다.
MouseArea 에는 여러 개의 컴포즈된 이벤트가 포함됩니다: clicked
, doubleClicked
및 pressAndHold
. 이들은 pressed
와 같은 기본 마우스 이벤트로 구성되며 기본 이벤트와 비교하여 다르게 전파될 수 있습니다.
propagateComposedEvents를 true로 설정하면 컴포짓 이벤트가 씬의 같은 위치에 있는 다른 마우스 영역으로 자동으로 전파됩니다. 각 이벤트는 스택 순서대로 그 아래에 있는 다음 enabled MouseArea 으로 전파되며, MouseArea 이 이벤트를 수락할 때까지 시각적 계층 구조를 따라 전파됩니다. pressed
이벤트와 달리 컴포짓 이벤트는 핸들러가 없으면 자동으로 수락되지 않습니다.
예를 들어 아래는 파란색 Rectangle 을 포함하는 노란색 Rectangle 입니다. 파란색 직사각형은 시각적 스택 순서 계층 구조에서 가장 위에 있는 항목으로 노란색 직사각형 위에 시각적으로 렌더링됩니다. 파란색 직사각형은 모든 수신된 clicked
이벤트에 대해 propagateComposedEvents를 true로 설정하고 MouseEvent::accepted 도 false로 설정하므로, 이 직사각형이 수신하는 모든 clicked
이벤트는 그 아래 노란색 직사각형의 MouseArea 로 전파됩니다.
import QtQuick 2.0 Rectangle { color: "yellow" width: 100; height: 100 MouseArea { anchors.fill: parent onClicked: console.log("clicked yellow") } Rectangle { color: "blue" width: 50; height: 50 MouseArea { anchors.fill: parent propagateComposedEvents: true onClicked: (mouse)=> { console.log("clicked blue") mouse.accepted = false } } } }
파란색 직사각형을 클릭하면 그 자식 MouseArea 의 onClicked
핸들러가 호출되고, 이벤트가 노란색 직사각형의 MouseArea 로 전파되어 자체 onClicked
핸들러가 호출됩니다.
이 프로퍼티는 겹치는 마우스 영역이 함께 구성된 이벤트를 처리하도록 하려는 경우의 사용 사례를 크게 간소화합니다. 예를 들어 MouseArea 하나는 clicked
신호를 처리하고 다른 하나는 pressAndHold
를 처리하도록 하거나, MouseArea 하나는 대부분 clicked
를 처리하지만 특정 조건이 충족될 때만 통과시키려는 경우입니다.
scrollGestureEnabled : bool |
이 속성은 트랙패드의 두 손가락 플릭 제스처와 같이 마우스가 아닌 장치의 스크롤 제스처에 MouseArea 이 응답할지 여부를 제어합니다. false로 설정하면 휠이 있는 실제 마우스에서 휠 이벤트가 발생할 때만 wheel 신호가 발생하고 스크롤 제스처 이벤트는 이를 처리할 다른 항목으로 전달됩니다. 예를 들어, 사용자가 MouseArea 이 포함된 항목 위에 커서가 있는 동안 플릭 제스처를 수행하여 그 아래에 있는 플릭 가능 항목과 상호 작용하려고 할 수 있습니다. 이 속성을 false로 설정하면 PinchArea 이 마우스 휠이나 핀치 제스처를 처리하고 Flickable은 플릭 제스처를 처리합니다.
기본적으로 이 속성은 참입니다.
신호 문서
canceled() |
이 신호는 다른 항목이 마우스 이벤트 처리를 도용하여 마우스 이벤트가 취소된 경우에 발생합니다.
이 신호는 입력을 처리하는 MouseArea 이 두 개 이상 있거나 Flickable 안에 MouseArea 이 있을 때 유용합니다. 후자의 경우 onPressed
신호 핸들러에서 일부 로직을 실행한 다음 드래그를 시작하면 Flickable 이 MouseArea 에서 마우스 핸들링을 훔칩니다. 이러한 경우 MouseArea 이 Flickable 로 마우스 핸들링을 잃었을 때 로직을 재설정하려면 released 외에 canceled
을 처리해야 합니다.
참고: 해당 핸들러는 onCanceled
입니다.
clicked(MouseEvent mouse) |
이 신호는 클릭이 있을 때 발생합니다. 클릭은 MouseArea 안에서 누른 후 손을 떼는 것으로 정의됩니다(누른 후 MouseArea 밖으로 이동했다가 다시 안으로 이동한 후 손을 떼는 것도 클릭으로 간주됨).
mouse 매개변수는 클릭 릴리즈의 x 및 y 위치, 클릭이 유지되었는지 여부 등 클릭에 대한 정보를 제공합니다.
이 신호를 처리할 때 mouse 파라미터의 accepted 속성을 변경해도 propagateComposedEvents 속성이 true
이 아닌 한 아무런 영향을 미치지 않습니다.
참고: 해당 핸들러는 onClicked
입니다.
doubleClicked(MouseEvent mouse) |
entered() |
이 신호는 마우스가 마우스 영역에 들어올 때 발생합니다.
기본적으로 이 신호는 현재 버튼을 누르고 있는 경우에만 발생합니다. 마우스 버튼을 누르지 않은 상태에서도 이 신호를 발생시키려면 hoverEnabled 을 true로 설정합니다.
참고: 해당 핸들러는 onEntered
입니다.
hoverEnabled도 참조하세요 .
exited() |
이 신호는 마우스가 마우스 영역을 벗어날 때 발생합니다.
기본적으로 이 신호는 현재 버튼을 누르고 있는 경우에만 발생합니다. 마우스 버튼을 누르지 않아도 이 신호를 내보내려면 hoverEnabled 을 true로 설정합니다.
아래 예는 mouseArea1
위에 mouseArea2
가 있는 두 마우스 영역 간의 일반적인 관계를 보여줍니다. 마우스를 mouseArea1
에서 mouseArea2
로 이동하면 mouseArea1
에서 exited
신호가 발생합니다.
Rectangle { width: 400; height: 400 MouseArea { id: mouseArea1 anchors.fill: parent hoverEnabled: true } MouseArea { id: mouseArea2 width: 100; height: 100 anchors.centerIn: parent hoverEnabled: true } }
대신 두 마우스 영역에 부모-자식 관계를 부여하면 mouseArea1
에서 mouseArea2
로 마우스를 이동해도 mouseArea1
가 exited
를 방출하지 않습니다. 대신 둘 다 동시에 마우스오버된 것으로 간주됩니다.
참고: 해당 핸들러는 onExited
입니다.
hoverEnabled도 참조하세요 .
positionChanged(MouseEvent mouse) |
이 신호는 마우스 위치가 변경될 때 발생합니다.
mouse 매개변수는 마우스에 대한 정보(x 및 y 위치, 현재 누른 버튼 포함)를 제공합니다.
기본적으로 이 신호는 현재 버튼을 누른 경우에만 발생합니다. 마우스 버튼을 누르지 않은 상태에서도 이 신호를 보내려면 hoverEnabled 을 true로 설정합니다.
이 신호를 처리할 때 mouse 매개 변수의 accepted 속성을 변경해도 아무런 영향을 미치지 않습니다.
참고: 해당 핸들러는 onPositionChanged
입니다.
pressAndHold(MouseEvent mouse) |
이 신호는 길게 누를 때(현재 800ms) 발생합니다. mouse 매개변수는 프레스의 x 및 y 위치, 어떤 버튼을 눌렀는지 등 프레스에 대한 정보를 제공합니다.
이 신호를 처리할 때 mouse 파라미터의 accepted 속성을 변경해도 propagateComposedEvents 속성이 true
이 아닌 한 아무런 영향을 미치지 않습니다.
참고: 해당 핸들러는 onPressAndHold
입니다.
pressed(MouseEvent mouse) |
이 신호는 버튼을 눌렀을 때 발생합니다. mouse 매개변수는 x 및 y 위치, 눌렀던 버튼 등 누름에 대한 정보를 제공합니다.
이 신호를 처리할 때 mouse 매개변수의 accepted 속성을 사용하여 MouseArea 이 누름을 처리할지 여부와 향후 마우스 이벤트를 모두 처리할지 여부를 제어합니다. 기본값은 이벤트를 수락하고 이 마우스 영역 아래의 다른 마우스 영역이 이벤트를 처리하지 못하도록 하는 것입니다. Accept를 false로 설정하면 다음 버튼을 누를 때까지 이 MouseArea 으로 더 이상의 이벤트가 전송되지 않습니다.
참고: 해당 핸들러는 onPressed
입니다.
released(MouseEvent mouse) |
wheel(WheelEvent wheel) |
이 신호는 마우스 휠 및 트랙패드 스크롤 제스처 모두에 대한 응답으로 발생합니다.
wheel 매개변수는 x 및 y 위치, 현재 누른 모든 버튼, 각도 델타 및 픽셀 델타를 포함한 휠 움직임에 대한 정보 등 이벤트에 대한 정보를 제공합니다.
참고: 해당 핸들러는 onWheel
입니다.
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.