1

水平スクロールバーでパンできるUIを作成していますが、独立してパンおよびズームすることもできます(ノンリニアエディターのクリップウィンドウのように)。これはQtベースのUIであり、高さを考慮する必要はなく、単に長さを考慮する必要があります。

パン自体は扱えると思いますが、ズームはできません。問題は、スクロールバーのスライダー/グリップウィジェットのサイズをどのように制御するかです。UIにズームインすると縮小し、ズームアウトするとその逆になります。スライダーのサイズはズームを反映している必要があります(つまり、ビューの10%を表示するためにズームインした場合、スライダーはスクロールバーのサイズの約10%、または可能な限りそれに近い必要があります)。

問題は、Qtでスライダーのサイズを直接制御できないようで、最小/最大値と大きなステップ数の組み合わせを介して間接的にしか制御できないことです。これが(恥ずかしいことに)私がいる場所です。立ち往生。これらの要素をスケーリングして、バーでのスクロールを維持できないようです。他の誰かが以前にこの種のことをしたことがありますか?

4

1 に答える 1

1

ごめん、

Mayaを自分で使用したことはありません。

スライダー(親指)のサイズだけが気になる場合は、setMaximum()、setMinimum()関数で制御されます。

要件を正しく理解できれば、親指のサイズをズームレベルに対応させる必要があります

  • ズーム率=10のように1000%ズーム->親指のサイズはスクロールバーの10%です
  • スクロールバーがない場所で100%ズームします。

ズームのスケールとなるズーム係数(たとえばK)を計算でき、Mayaを介してスクロールバーの最小/最大/現在の値を制御できると仮定しています。

この場合、常にスクロールバーの最小値を0にします。

  • スクロールバーの最大値を、ズーム率が1(k-current):1(original)のときに表示するコンテンツの幅に設定します。この最大値を将来の使用のために保存します(Z)

^^これにより、コンテンツが使用可能な幅を正確に満たす場合、ズーム率1でスクロールバーが表示されなくなります。

  • 次に、ズーム率がK = 2(200%スケール)に変更されたとき。
    1. を計算して、古いズーム係数(Y)を取得しますscrollbar->maximum() / Z
    2. 新しいスクロールバーの最大値を。として設定しK * Zます。
    3. 新しいスクロールバーの値を。として設定しscrollbar->value() * K / Yます。

^^これで、スクロールバーのつまみのサイズが探しているサイズに設定されます(ズーム率)

これは、ズーム率1のコンテンツがスクロールバーを必要とせず、使用可能な幅に完全に適合することを前提としていることに注意してください。

これが当てはまらず、コンテンツがサイズ変更可能であることを示すコントロールの幅がサイズ変更可能である場合、上記のロジックの結果は、ズーム係数が10の場合、ズーム係数が1のときに親指がそのサイズの10%になることを意味します。したがって、親指のサイズはスクロールバーの10%ではなく、100%のスケールでそれ自体の10%になります

于 2013-03-03T17:00:46.437 に答える