5

迷惑な動作をする狭いサイズ変更ハンドルを実装しています。マウスがハンドルの真上にあるときのカーソルの形状は期待どおりですが、ハンドルのドラッグが開始されると、カーソルの形状に一貫性がなくなります。これには 2 つの原因があります。

  • カーソルが速く移動し、ハンドルが「追いつく」までハンドルの前に移動する場合 (または「fluid qml」が流動的すぎる場合) - カーソルの形状が急速に変化して点滅するため、これは特に厄介です。

  • カーソルがハンドルの許可された自由度の外に移動したとき

ドキュメントを調べましたが、プレスが離されるまでカーソルをロックすることについては何も含まれていないようです。

私はそれを修正するためのハックを見つけることができました-ダミーのオーバーレイMouseAreaを使用してacceptedButtons: Qt.NoButton-これは実際にはカーソルの一貫性を偽造するのに役立ちますが、それ自体の問題があります。ハンドルがオーバーレイ マウス領域の下にあるため、オーバーレイ マウス領域があると、カーソルがハンドル上にあるときにサイズ変更形状に変更できません。カーソルの形状をまったく変更することはできません。そのため、形状のサイズ変更はハンドルがクリックされた後にのみ開始されますが、これは理想とはほど遠いものです。オーバーレイ マウス領域を に設定してenabled: falseも、それは変わりません。下にあるマウス領域からのカーソル形状の変更をブロックし続けます。オーバーレイ マウス領域のサイズを 0x0 に設定するなどの回避策もありますが、これはちょっと見苦しいです。

理想的には、マウス領域がその領域の内外にあるかどうかに関係なく、マウス領域が押されるまでカーソルの形状が持続する必要があります。カーソルの形状を維持する必要があります。たとえば、ウィンドウのサイズ変更ハンドルを動かして、ウィンドウのサイズを最小サイズよりも小さく変更しても、プレスを放すまでは形状が変更されたままになります。

私には、実装に欠陥があるようですMouseArea-押している間はカーソルの形状が保持されず、マウス領域が無効になっていてもカーソルの形状が変更されます。

4

2 に答える 2

0

現在の動作にはいくつかのユースケースがあると思います。たとえば、カーソルは、現在ホバーされているオブジェクトとマウスが押されたオブジェクトとの間の関係を伝えることができます。別の例として、ドラッグの速度を意図的に制限することができます。ユーザーが速度を上げすぎると、背後にあるアイテムに依存する結果が生じます。

確かに dtech の要求はより一般的です。また、それをオプション機能として見たいと思いますが、変更としてではありません。現在の方法では、アプリにより用途の広い部分が提供されます。私は、ライブラリ作成者が想像したとおりにしか使用できない洗練されたコンポーネントが好きではありません。

永続的なドラッグ カーソルの QML のみの別の解決策は、必要に応じて永続的な形状を保持するために、すべての itens の背後に MouseArea を配置することです。

Item
{
    id: scene;    width: 800;  height: 600

    MouseArea
    {  
        id: mouse
        anchors.fill: scene
    }

    Rectangle
    {
        id: draggable;    width: 40;  height: 30;   color: "red"
        MouseArea
        {
            anchors.fill:  draggable
            drag.target :  draggable

            //set and unset a persistent cursor
            onPressed :  mouse.cursorShape =  Qt.DragMoveCursor;
            onReleased:  mouse.cursorShape =  Qt.ArrowCursor;    //QT default cursor

            //let non default scene cursors prevail over the item's
            cursorShape: mouse.cursorShape === Qt.ArrowCursor ?  
                Qt.OpenHandCursor : mouse.cursorShape;
        }
    }
}
于 2021-06-12T01:16:04.767 に答える