TapHandler QML Type
タップとクリックのハンドラ。もっと見る...
| Import Statement: | import QtQuick |
| Inherits: |
プロパティ
- acceptedButtons : flags
- acceptedDevices : flags
- acceptedModifiers : flags
- acceptedPointerTypes : flags
- active : bool
- cursorShape : Qt::CursorShape
- dragThreshold : int
- enabled : bool
- exclusiveSignals : enumeration
(since 6.5) - gesturePolicy : enumeration
- grabPermissions : flags
- longPressThreshold : real
- margin : real
- parent : Item
- point : handlerPoint
- pressed : bool
- tapCount : int
- target : Item
- timeHeld : real
信号
- canceled(eventPoint point)
- doubleTapped(eventPoint eventPoint, Qt::MouseButton button)
- grabChanged(PointerDevice::GrabTransition transition, eventPoint point)
- longPressed()
- singleTapped(eventPoint eventPoint, Qt::MouseButton button)
- tapCountChanged()
- tapped(eventPoint eventPoint, Qt::MouseButton button)
詳細説明
TapHandler は、タッチスクリーンのタップまたはマウスのクリックのハンドラです。
有効なタップジェスチャの検出はgesturePolicy に依存します。デフォルト値は DragThreshold で、押下と解放が空間的にも時間的にも近接している必要があります。この場合、TapHandler はパッシブグラブのみで機能するため、他のアイテムや入力ハンドラへのイベント配信を妨げません。したがって、デフォルトのgesturePolicy は、バインディングおよび/または JavaScript コールバックを持つ TapHandler を追加して、既存のコントロールまたはアイテムの動作を変更する場合に便利です。
QPushButtonボタンを押してから気が変わったら、クリックをキャンセルするためにボタンの端からずっとドラッグする必要があります。この使用例では、gesturePolicy をTapHandler.ReleaseWithinBounds に設定します。
import QtQuick Rectangle { id: button signal clicked property alias text: buttonLabel.text height: Math.max(Screen.pixelDensity * 7, buttonLabel.implicitHeight * 1.2) width: Math.max(Screen.pixelDensity * 11, buttonLabel.implicitWidth * 1.3) radius: 3 property color dark: Qt.darker(palette.button, 1.3) gradient: Gradient { GradientStop { position: 0.0; color: tapHandler.pressed ? dark : palette.button } GradientStop { position: 1.0; color: dark } } TapHandler { id: tapHandler gesturePolicy: TapHandler.ReleaseWithinBounds onTapped: button.clicked() } Text { id: buttonLabel text: "Click Me" color: palette.buttonText anchors.centerIn: parent } }
マルチタップジェスチャー(ダブルタップ、トリプルタップなど)の場合、移動距離はマウスでQStyleHints::mouseDoubleClickDistance ()、タッチでQStyleHints::touchDoubleTapDistance ()を超えてはならず、タップ間の時間はQStyleHints::mouseDoubleClickInterval ()を超えてはなりません。
MouseArea とQt Quick Examples - Pointer Handlersも参照してください 。
プロパティのドキュメント
acceptedButtons : flags
このポインタハンドラを起動できるマウスボタン。
デフォルトでは、このプロパティはQt.LeftButton に設定されています。 マウスボタンの OR の組み合わせに設定することができ、他のボタンからのイベントは無視されます。
例えば、コントロールが左クリックと右クリックに異なる方法で反応するように、2つのハンドラを設定することができます:
Item { TapHandler { onTapped: console.log("left clicked") } TapHandler { acceptedButtons: Qt.RightButton onTapped: console.log("right clicked") } }
注: タッチスクリーンをタップしたり、グラフィックタブレットのスタイラスをタップしたりすると、マウスの左ボタンをクリックしたことになります。この動作はacceptedDevices またはacceptedPointerTypes で変更できます。
acceptedDevices : flags
このポインタハンドラを起動できるポインティングデバイスのタイプ。
デフォルトでは、このプロパティはPointerDevice.AllDevices に設定されています。 デバイスタイプの OR の組み合わせに設定すると、一致しないデバイスからのイベントは無視されます。
例えば、マウスやスタイラスのクリックに反応するコントロールと、タッチスクリーンのタップに反応するコントロールを、2つのハンドラで使い分けることができます:
Item { TapHandler { acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad | PointerDevice.Stylus onTapped: console.log("clicked") } TapHandler { acceptedDevices: PointerDevice.TouchScreen onTapped: console.log("tapped") } }
注意: すべてのプラットフォームがマウスとタッチパッドを区別できるわけではありません。区別できるプラットフォームでは、マウスとタッチパッドの動作を同じにしたい場合がよくあります。
acceptedModifiers : flags
このプロパティが設定されると、ポインタ・イベントに反応するために、指定されたキーボード修飾キーが押されることを要求し、そうでなければ無視する。
このプロパティがQt.KeyboardModifierMask (デフォルト値)に設定されている場合、PointerHandler は修飾キーを無視する。
例えば、Item は同じタイプのハンドラを2つ持つことができ、そのうちの1つは、必要なキーボード修飾子が押された場合にのみ有効になる:
Item { TapHandler { acceptedModifiers: Qt.ControlModifier onTapped: console.log("control-tapped") } TapHandler { acceptedModifiers: Qt.NoModifier onTapped: console.log("tapped") } }
acceptedModifiers を修飾キーの OR の組み合わせに設定した場合、ハンドラを有効にするには、それらの修飾キーがすべて押されなければならないことを意味します:
Item { TapHandler { acceptedModifiers: Qt.ControlModifier | Qt.AltModifier | Qt.ShiftModifier onTapped: console.log("control-alt-shift-tapped") } }
使用可能な修飾子は以下の通りです:
| 定数 | 説明 |
|---|---|
NoModifier | 修飾キーは使用できません。 |
ShiftModifier | キーボードのShiftキーが押されていなければならない。 |
ControlModifier | キーボードの Ctrl キーが押されていなければならない。 |
AltModifier | キーボードのAltキーが押されていること。 |
MetaModifier | キーボードのMetaキーが押されていなければならない。 |
KeypadModifier | キーパッドのボタンが押されていること。 |
GroupSwitchModifier | X11のみ(Windowsではコマンドライン引数で有効にしない)。キーボードのMode_switchキーが押されていなければならない。 |
KeyboardModifierMask | ハンドラーは、どの修飾子が押されたかは気にしない。 |
複数のハンドラと複数の修飾子フラグの組み合わせで実現できるよりもさらに複雑な動作が必要な場合は、JavaScriptコードで修飾子をチェックできます:
Item { TapHandler { onTapped: switch (point.modifiers) { case Qt.ControlModifier | Qt.AltModifier: console.log("CTRL+ALT"); break; case Qt.ControlModifier | Qt.AltModifier | Qt.MetaModifier: console.log("CTRL+META+ALT"); break; default: console.log("other modifiers", point.modifiers); break; } } }
Qt::KeyboardModifierも参照してください 。
acceptedPointerTypes : flags
このポインタハンドラをアクティブにできるポインティングデバイス(指、スタイラス、消しゴムなど)のタイプ。
デフォルトでは、このプロパティはPointerDevice.AllPointerTypes に設定されています。 デバイスタイプの OR の組み合わせに設定すると、一致しないdevices からのイベントは無視されます。
たとえば、マウス、タッチ、スタイラスのクリックには何らかの方法で反応するが、グラフィック・タブレットの消しゴムツールでタップすると自身を削除するようなコントロールを、2つのハンドラで作成することができます:
Rectangle { id: rect TapHandler { acceptedPointerTypes: PointerDevice.Generic | PointerDevice.Finger | PointerDevice.Pen onTapped: console.log("clicked") } TapHandler { acceptedPointerTypes: PointerDevice.Eraser onTapped: rect.destroy() } }
active : bool [read-only]
これは、この入力ハンドラが1つ以上のeventPoints 、それらのポ イントの排他的なグラブに成功することで、それらのハンドラをハンドリングす るための唯一の責任を取ったときはいつでも、true を保持する。これは、この入力ハンドラが、それらのイベントポイントの動きに応じてその プロパティを最新に保ち、target (もしあれば)を積極的に操作してい ることを意味する。
cursorShape : Qt::CursorShape
このプロパティは、active がtrue である間、マウスがparent アイテムの上に置かれたときに表示されるカーソル形状を保持します。
利用可能なカーソル形状は以下の通りです:
- 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
デフォルト値は設定されていないため、parent アイテムのcursor が表示されます。このプロパティは、undefined に設定することで、同じ初期状態に戻すことができます。
注意: このプロパティが設定されていない場合、またはundefined に設定されている場合、値を読み取るとQt.ArrowCursor を返します。
Qt::CursorShape 、QQuickItem::cursor()、HoverHandler::cursorShapeも参照のこと 。
dragThreshold : int
ドラッグ ジェスチャとして扱うために、ユーザーがeventPoint をドラッグする距離をピクセル単位で指定します。
デフォルト値はプラットフォームと画面解像度によって異なります。undefinedに設定することで、デフォルト値に戻すことができます。ドラッグ ジェスチャが開始したときの動作は、ハンドラによって異なります。
enabled : bool
PointerHandler が無効化されると、すべてのイベントを拒否し、シグナルは発せられない。
PointerHandler のparent がdisabled の場合、enabled プロパティがtrue のままでも、ハンドラは事実上無効になる。
注: HoverHandler は異なる動作をします。詳しくはenabled プロパティのドキュメントを参照してください。
exclusiveSignals : enumeration [since 6.5]
singleTapped() とdoubleTapped() シグナルの排他性を決定する。
| 定数 | 説明 |
|---|---|
NotExclusive | (デフォルト)singleTapped() とdoubleTapped() は、それぞれユーザが1回または2回タップしたときに即座に発せられます。 |
SingleTap | singleTapped() は、ユーザが1回タップすると即座に発せられ、doubleTapped() は発せられない。 |
DoubleTap | doubleTapped() は、ユーザーが2回タップすると即座に発せられ、singleTapped() は発せられない。 |
(SingleTap | DoubleTap) | どちらの信号もQStyleHints::mouseDoubleClickInterval()まで遅延されるため、singleTapped()またはdoubleTapped()のどちらかを発することはできるが、両方を発することはできない。しかし、mouseDoubleClickInterval 内に3回以上のタップが発生すると、どちらのシグナルも発せられない。 |
注: tapped() やtapCountChanged() などの残りのシグナルは、このプロパティに関係なく、常に即座に発信されます。
このプロパティはQt 6.5で導入されました。
gesturePolicy : enumeration
タップまたは長押しジェスチャーが認識されるための空間的制約。さらに、longPressThreshold が経過する前にリリースされなければならないという制約もある。これらの制約が満たされない場合、tapped シグナルは発せられず、tapCount はインクリメントされない。空間制約に違反した場合、pressed 、保持された時間に関係なく、直ちにtrueからfalseに遷移する。
gesturePolicy は、後述するグラブの動作にも影響する。
| 定数 | 説明 |
|---|---|
TapHandler.DragThreshold
プレス時のグラブ:パッシブ | (デフォルト値)eventPoint が大きく動いてはいけません。マウス、指、またはスタイラスがシステム全体のドラッグしきい値 (QStyleHints::startDragDistance) を超えて移動した場合、デバイスまたは指が押されたままであっても、タップジェスチャはキャンセルされます。このポリシーは、TapHandler が他の入力ハンドラ(たとえばDragHandler )やイベント処理アイテム(たとえば Qt Quick Controlsこの場合、TapHandler は排他的なグラブを取らず、単にpassive grab を取るからです。つまり、DragThreshold は、既存の動作を補強するのに特に便利です。別のアイテムやハンドラがすでに反応しているときでも、タップ/クリック/長押しに反応し、おそらく UI の別のレイヤーでも反応します。次のスニペットは、1つのコンポーネントで使用される1つのTapHandler 。しかし、コンポーネントのインスタンスを2つ重ねると、受動的なグラブはイベント伝播を止めないので、それらの両方でプレスが発生したときに、それらの両方のハンドラが同時に反応するのがわかります:Item { width: 120; height: 80 component Button : Rectangle { TapHandler { id: tapHandler gesturePolicy: TapHandler.DragThreshold // the default onTapped: tapFlash.start() } } Button { x: 10; y: 10 } Button { x: 30; y: 30 } } |
TapHandler.WithinBounds
プレス時のグラブ:排他的 | eventPoint がparent アイテムの境界を離れると、タップジェスチャはキャンセルされます。TapHandler は押されるとexclusive grab を取りますが、境界の制約が満たされなくなるとすぐにグラブを解除します。TapHandler { id: tapHandler gesturePolicy: TapHandler.WithinBounds onTapped: tapFlash.start() } |
TapHandler.ReleaseWithinBounds
プレス時のグラブ:排他的 | リリース時(マウスボタンが離されるか、指が持ち上げられる)、eventPoint がparent アイテムの境界の外にある場合、タップジェスチャは認識されません。これは、ボタンウィジェットの典型的な動作に対応しています。ボタンの外側をドラッグすることでクリックをキャンセルでき、リリース前にボタンの内側をドラッグして戻ることで変更することもできます。このジェスチャーを検出するには、TapHandler が押下時にexclusive grab を取得し、離すまで保持する必要があることに注意してください。TapHandler { id: tapHandler gesturePolicy: TapHandler.ReleaseWithinBounds onTapped: tapFlash.start() } |
TapHandler.DragWithinBounds
押下時につかむ:排他的 | 押されたとき、TapHandler はexclusive grab を取ります。その後、eventPoint はparent アイテムの境界内でドラッグできます。timeHeld プロパティはカウントを続け、longPressed() シグナルはドラッグ距離に関係なく発せられます。ただし、WithinBounds と同様に、ポイントが境界を離れると、タップ・ジェスチャーはcanceled() となり、active() は false となり、timeHeld はカウントを停止します。これは、単一のTapHandler が押下を検出し、timeHeld が「開く」アニメーションを駆動し、ユーザーがメニュー項目にドラッグして離すことができ、メニューを含む親シーンの境界を離れることがない、メニューのような押下-ドラッグ-離すコンポーネントの実装に適しています。この値は Qt 6.3 で追加されました。TapHandler { id: menuPopupHandler gesturePolicy: TapHandler.DragWithinBounds onPressedChanged: if (pressed) { menu.x = point.position.x - menu.width / 2 menu.y = point.position.y - menu.height / 2 } else { feedback.text = menu.highlightedMenuItem selectFlash.start() } onCanceled: feedback.text = "canceled" } |
Qt Quick Examples - Pointer Handlersは、これらの使用例を示しています。
注意: TapHandler が他の動作と衝突するようなケースで反応していることがわかったら、最初に試 すべきことは、どのgesturePolicy が適切かを考えることです。gesturePolicy を変更しても直らない場合は、grabPermissions を調整した方がよいケースもあります。このハンドラか、TapHandler が反応しないようにする別のハンドラのどちらかで調整するのがよいでしょう。
grabPermissions : flags
このプロパティは、このハンドラのロジックが排他グラブを引き継ぐことを決定した場合、または他のハンドラからグラブの引き継ぎやキャンセルを承認するよう求められた場合のパーミッションを指定します。
| 定数 | 説明 |
|---|---|
PointerHandler.TakeOverForbidden | このハンドラは、ItemまたはHandlerのどのタイプからもグラブ許可を取らず、与えません。 |
PointerHandler.CanTakeOverFromHandlersOfSameType | このハンドラは、同じクラスの他のハンドラから排他的グラブを取ることができます。 |
PointerHandler.CanTakeOverFromHandlersOfDifferentType | このハンドラは、あらゆる種類のハンドラから排他的なグラブを取ることができます。 |
PointerHandler.CanTakeOverFromItems | このハンドラは、どのタイプのItemからも排他的グラブを取ることができます。 |
PointerHandler.CanTakeOverFromAnything | このハンドラは、どのタイプのアイテムまたはハンドラからも排他的グラブを取ることができます。 |
PointerHandler.ApprovesTakeOverByHandlersOfSameType | このハンドラーは、同じクラスの他のハンドラーがグラブを取ることを許可します。 |
PointerHandler.ApprovesTakeOverByHandlersOfDifferentType | このハンドラーは、あらゆる種類のハンドラーにグラブを取る許可を与えます。 |
PointerHandler.ApprovesTakeOverByItems | このハンドラーは、あらゆる種類のItemがグラブを取ることを許可します。 |
PointerHandler.ApprovesCancellation | このハンドラは、そのグラブが null に設定されることを許可します。 |
PointerHandler.ApprovesTakeOverByAnything | このハンドラはどのタイプのItemやハンドラにもグラブを取る許可を与えます。 |
デフォルトはPointerHandler.CanTakeOverFromItems | PointerHandler.CanTakeOverFromHandlersOfDifferentType | PointerHandler.ApprovesTakeOverByAnything で、ほとんどの引き継ぎシナリオを許可しますが、例えば2つのPinchHandlerが同じタッチポイントを取り合うことを避けます。
longPressThreshold : real
値が0 より大きい場合、長押しジェスチャをトリガしてlongPressed() シグナルを発するために、eventPoint が押されなければならない時間(秒)。この制限時間前にポイントが離された場合、gesturePolicy 制約が満たされていれば、タップを検出することができます。longPressThreshold が0 の場合、タイマーは無効になり、信号は発せられない。longPressThreshold がundefined に設定されている場合、代わりにデフォルト値が使用され、このプロパティから読み出すことができます。
デフォルト値は、秒に変換されたQStyleHints::mousePressAndHoldInterval() です。
margin : real
eventPoint がこのハンドラを起動できる、parent アイテムの境界を超えたマージン。例えば、target がparent でもあるようなPinchHandler では、parent が非常に小さいサイズに縮小されてもピンチジェスチャーが可能なように、一般的なユーザーの指の幅の半分以上の距離に設定すると便利です。また、TapHandler ベースのボタンが画面の端の近くに配置されている場合、フィッツの法則に準拠するために使用することができます:ボタンが視覚的に端から数ピクセル離れていても、画面の端でマウスクリックに反応します。
デフォルト値は0です。

parent : Item
ハンドラのスコープであるItem; それが宣言されたItem。ハンドラはこのItemに代わってイベントを処理する。つまり、ポインタイベントは、そのeventPoints の少なくとも1つがItemの内部で発生する場合に関連する。最初はtarget() が同じであるが、再割り当てが可能である。
target およびQObject::parent()も参照 。
point : handlerPoint [read-only]
eventPoint 現在扱われている点。現在扱われている点がない場合、このオブジェクトはデフォルト値(すべての座標が0)にリセットされる。
pressed : bool [read-only]
マウスまたはタッチポイントが押されるたびにtrueを保持し、押されてからの動きは現在のgesturePolicy に準拠する。eventPoint が離されるか、ポリシーに違反すると、pressed はfalse に変わる。
tapCount : int [read-only]
1つのジェスチャーとみなされる時間と空間の制約の中で発生したタップの数。ボタンが変更されると、カウンタは1にリセットされる。たとえば、トリプルタップを検出するには、次のように記述します:
Rectangle { width: 100; height: 30 signal tripleTap TapHandler { acceptedButtons: Qt.AllButtons onTapped: if (tapCount == 3) tripleTap() } }
target : Item
このハンドラが操作するItem。
デフォルトでは、ハンドラが宣言されているItem(parent )と同じである。しかし、あるItem内のイベントを処理しながら別のItemを操作するために、ターゲットを別のItemに設定したり、null 、デフォルトの動作を無効にして、代わりに別の動作を行うために、ターゲットを別のItemに設定すると便利な場合がある。
timeHeld : real [read-only]
ドラッグのしきい値を超えることなく、押されたポイントが保持されている時間(秒)。レンダリングされるフレームごとに少なくとも1回更新され、長押しによってトリガーされるアクションの進行状況を示すアニメーションをレンダリングすることができます。また、長押しの長さに応じて、一連のアクションのいずれかをトリガーすることも可能です。
ゼロ未満の値は、このハンドラのItem 内にポイントが保持されていないことを意味する。
注: gesturePolicy がTapHandler.DragWithinBounds に設定されている場合、timeHeld は、押された点がドラッグしきい値を超えて移動してもカウントを停止せず、点がparent アイテムのbounds から離れたときのみカウントを停止する。
シグナル・ドキュメント
canceled(eventPoint point)
このハンドラがすでに与えられたpoint をグラブしている場合、グラブが別のポインタハンドラまたはアイテムによって盗まれると、このシグナルが発行されます。
注: 対応するハンドラはonCanceled です。
doubleTapped(eventPoint eventPoint, Qt::MouseButton button)
この信号は、parent アイテムが短い時間 (QStyleHints::mouseDoubleClickInterval()) と距離 (QStyleHints::mouseDoubleClickDistance() またはQStyleHints::touchDoubleTapDistance()) の間に 2 回タップされたときに発せられる。このシグナルは常にsingleTapped 、tapped 、tapCountChanged の後に発生する。eventPoint シグナル・パラメータには、タップされたポイントに関するリリース・イベントの情報が含まれ、button はクリックされたmouse button であり、タッチスクリーンではNoButton である。
注: 対応するハンドラはonDoubleTapped です。
grabChanged(PointerDevice::GrabTransition transition, eventPoint point)
このシグナルは、グラブがこのハンドラに関連する何らかの方法で変更されたときに発せられる。
transition (動詞)は何が起こったかを示す。point (オブジェクト)は、グラブされた、またはグラブされなかったポイントです。
transition の有効な値は以下の通りです:
| 定数 | 説明 |
|---|---|
PointerDevice.GrabExclusive | このハンドラは、point を処理するための主要な責任を取った。 |
PointerDevice.UngrabExclusive | このハンドラは、以前の排他的グラブを放棄した。 |
PointerDevice.CancelGrabExclusive | このハンドラの排他的グラブは引き継がれたかキャンセルされた。 |
PointerDevice.GrabPassive | このハンドラは、point を監視するために、パッシブグラブを獲得した。 |
PointerDevice.UngrabPassive | このハンドラーは以前のパッシブグラブを放棄した。 |
PointerDevice.CancelGrabPassive | このハンドラの前のパッシブグラブが異常終了した。 |
注: 対応するハンドラはonGrabChanged 。
longPressed()
このシグナルは、parent アイテムが押され、longPressThreshold を超える時間保持されたときに発せられます。 つまり、タッチポイントやボタンを長押ししても、どの動きもドラッグしきい値を超えない場合、timeHeld がlongPressThreshold を超えた時点で、longPressed シグナルが発せられます。
注: 対応するハンドラはonLongPressed です。
singleTapped(eventPoint eventPoint, Qt::MouseButton button)
この信号は、parent アイテムが一度タップされたときに発せられる。QStyleHints::mouseDoubleClickInterval を超える時間が経過すると、再度タップすることができますが、次のタップまでの時間が短い場合、tapCount が増加します。eventPoint シグナル・パラメータには、タップされたポイントに関するリリース・イベントの情報が含まれ、button はクリックされたmouse button であり、タッチスクリーンではNoButton である。
注: 対応するハンドラはonSingleTapped です。
tapCountChanged()
このシグナルは、parent アイテムが(指定された時間と距離の範囲内で)1回以上タップされ、現在のtapCount が前のtapCount と異なるときに発せられる。
注: 対応するハンドラはonTapCountChanged 。
tapped(eventPoint eventPoint, Qt::MouseButton button)
この信号は、parent アイテムがタップされるたびに発せられる。
つまり、longPressThreshold 以下の時間内にタッチポイントまたはボタンを押してから離すと、どのような動きもドラッグしきい値を超えないため、tapped シグナルがリリース時に発信されます。eventPoint シグナル・パラメータには、タップされたポイントに関するリリース・イベントの情報が含まれ、button はクリックされたmouse button 、タッチスクリーンではNoButton です。
import QtQuick Rectangle { width: 100 height: 100 TapHandler { acceptedButtons: Qt.LeftButton | Qt.RightButton onTapped: (eventPoint, button)=> console.log("tapped", eventPoint.device.name, "button", button, "@", eventPoint.scenePosition) } }
注: 対応するハンドラはonTapped です。
© 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.



