Smooth Zoom In QGraphicsView/ja

From Qt Wiki
< Smooth Zoom In QGraphicsView
Revision as of 17:47, 14 January 2015 by Maintenance script (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

English 日本語

QGraphicsView でスムースなズーム機能の作り方

QGraphicsView を使ったプログラムですばらしい機能とはもちろん(例えば、Google Earth のような)スムースなズーム機能です。その実装のためには、QGraphicsView を継承した独自ウィジェットを作成する必要があります。

その基本的な考えはユーザがマウスのホイールをひとつ「動かす」たびに、新たに「スケーリングアクション」を作成するというものです。スケーリングする合計数は _numScheduledScalings に格納します。

もちろん、wheelEvent の再実装が必要です。まずはそのコードを示します。説明はその後に行います。

ホイールの移動の「勢い」を計算して、_numScheduledScalings に加えます。QTimeLine のオブジェクトを作成して、 350ms の寿命の間に 20ms 毎に scalingTime() 関数を呼び出します。

倍率(factor)はシーンをどのくらいズームしたいかによって決まります。ほんの少しだけズームしたいときには、ホイールをとても繊細に動かさなくてはならないでしょう。_numScheduledScalings は小さくなり、 factor はほとんど 1 になるでしょう。その逆に、ホイールを勢いよく回転させた場合には、_numScheduledScalings は大きくなり、シーンのズームは速くなるでしょう。

もちろん、動的に作成した QTimeLine の処理も必要です。

Categories: