このページでは

マウスイベント

マウスやタッチスクリーンを含むすべてのポインティングデバイスからのイベントを処理する、より現代的な方法は、入力ハンドラ(Input Handlers)を使用することです。このページでは、もともとマウス入力を処理するために設計され、後にシンプルなタッチ指向のユーザーインターフェースにおいてシングルタッチイベント(合成マウスイベントの形式)の処理も行うようになった、オリジナルの `Qt Quick `MouseArea タイプについて説明します。

マウスの種類

マウスイベントの処理

QML では、シグナルとハンドラを使用してマウス操作を処理します。具体的には、Qt Quick はMouseArea およびMouseEvent タイプを提供しており、開発者はこれらを使用して、定義された領域内のマウスイベントを受け取る JavaScript コールバック(シグナルハンドラとも呼ばれる)を定義することができます。

マウス領域の定義

MouseArea 型は、定義された領域内で発生したイベントを受け取ります。この領域を定義する簡単な方法の一つは、anchors.fill プロパティを使用して、MouseArea を親コンポーネントの領域にアンカーすることです。親がRectangle (または任意のItem コンポーネント)である場合、MouseArea は親の寸法によって定義された領域を埋め尽くします。あるいは、親よりも小さい領域や大きい領域を定義することも可能です。

Rectangle {
    id: button
    width: 100; height: 100

    MouseArea {
        anchors.fill: parent
        onClicked: console.log("button clicked")
    }
    MouseArea {
        width:150; height: 75
        onClicked: console.log("irregular area clicked")
    }
}

イベントの受信

MouseArea 型は、さまざまなマウスイベントに応じてシグナルを発生させます。MouseArea 型のドキュメントでは、これらのジェスチャーについてより詳細に説明されています:

  • canceled
  • clicked
  • doubleClicked
  • entered
  • exited
  • 位置が変更された
  • 長押し
  • 押下済み
  • 解放

これらのシグナルには、シグナルが発信されたときに呼び出されるコールバックを設定することができます。

    MouseArea {
        anchors.fill: parent
        onClicked: console.log("area clicked")
        onDoubleClicked: console.log("area double clicked")
        onEntered: console.log("mouse entered the area")
        onExited: console.log("mouse left the area")
    }

ジェスチャーの有効化

一部のマウスジェスチャやボタンクリックは、イベントを送信または受信する前に有効にする必要があります。MouseArea およびMouseEvent の特定のプロパティにより、これらのジェスチャを有効にすることができます。

特定のマウスボタンをリッスン(または明示的に無視)するには、acceptedButtons プロパティに適切なマウスボタンを設定します。

当然のことながら、ボタンの押下やマウスの位置などのマウスイベントは、マウスクリック中に送信されます。たとえば、containsMouse プロパティは、マウスが押されている間のみ正しい値を取得します。hoverEnabled を設定すると、マウスボタンが押されていない場合でも、マウスイベントと位置情報が有効になります。hoverEnabled プロパティをtrue に設定すると、entered 、exited 、およびpositionChanged シグナルと、それぞれのシグナルハンドラが有効になります。

    MouseArea {
        hoverEnabled: true
        acceptedButtons: Qt.LeftButton | Qt.RightButton
        onEntered: console.log("mouse entered the area")
        onExited: console.log("mouse left the area")
    }

さらに、マウス領域全体を無効にするには、MouseArea のenabled プロパティをfalse に設定します。

MouseEvent オブジェクト

シグナルとそのコールバックは、パラメータとしてMouseEvent オブジェクトを受け取ります。mouse オブジェクトには、マウスイベントに関する情報が含まれています。たとえば、イベントを発生させたマウスボタンは、mouse.button プロパティを通じて取得できます。

また、MouseEvent オブジェクトは、accepted プロパティを使用してマウスイベントを無視することもできます。

さらなるシグナルの受信

多くのシグナルは、ダブルクリックなどのさまざまなマウスイベントを反映するために複数回送信されます。マウスクリックの分類を容易にするため、MouseEvent オブジェクトには、イベントの伝播を無効にするaccepted プロパティが用意されています。

QMLのイベントシステムの詳細については、「シグナルとハンドラ」および「イベントシステム」のドキュメントをご覧ください。

© 2026 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.