0

私はオーバーライドさQGraphicsSceneれ、2 つのメソッドをオーバーロードしています:mouseDoubleClickEventmouseReleaseEvent. このイベントごとに異なるロジックを実行したいのですが、区別する方法がわかりません。の前に少なくとも 1 つmouseReleaseEvent発生しましたmouseDoubleClickEvent

4

1 に答える 1

2

ダブルクリックで発生させたいロジックの場合はコードを 内mouseDoubleClickEvent()に配置し、マウス リリースで発生させたいロジックの場合は 内にコードを配置しますmouseReleaseEvent()

ユーザーがクリックしたがダブルクリックしていないときに何かをしたい場合は、2 回クリックするかどうかを確認するのを待つ必要があります。最初のマウス リリースで 200 ミリ秒のタイマーを開始します。

タイマーが切れる前にを取得した場合mouseDoubleClickEvent()、それはダブルクリックであり、ダブルクリック ロジックを実行できます。別のタイマーを取得する前にタイマーが期限切れになった場合mouseDoubleClick()は、それがシングル クリックであることがわかります。

疑似コード

main()
{
    connect(timer, SIGNAL(timeout()), this, SLOT(singleClick()));
}

mouseReleaseEvent()
{
    timer->start();
}

mouseDoubleClickEvent()
{
    timer->stop();
}

singleClick()
{
    // Do single click behavior
}

この答えは、かなり似た解決策を提供します。

于 2013-08-02T16:29:28.870 に答える