2010-12-10 13 views
5

QPushButtonサブクラスのディメンションを変更する際に、ユーザー定義のコーナーを固定します(必ずしも左上隅ではありません)。 QPushButtonは、その親としてQFrameを定義し、ウィンドウ内でフリーフローティングです。私がサブクラスコードのQPushButtonサブクラスのサイズを変更しようとすると、mouseEventsによって提供されるQPointがローカルなので、問題が起こっていると思います。 私はmyButton-> mapToGlobal(QPoint)とmyButton-> mapFromGlobalを使って作業しようとしましたが、どういう仕組みか分かりません。例を探すと、私は空になってしまいました。誰かが簡単な例を提供できますか?Qt QPointグローバル/ローカルマッピング

答えて

12

ローカル(ウィジェット)の座標は、ウィジェットの左上隅を基準にしています。グローバル座標は画面座標です。それらは簡単に変換可能で、QMouseEventのようなイベントは、ローカル(pos())とグローバル(globalPos())の両方の座標を提供します。

const QPoint localInB = a->mapTo(b, localPosInA); 

例:あなたはでトップレベルのウィジェットW1を持っていると言う(100110)あなたはBをウィジェットにウィジェットAからマップする場合 、あなたが短く、

const QPoint global = a->mapToGlobal(localPosInA); 
const QPoint localInB = b->mapFromGlobal(global); 

行うか、どちらか(10,10)(w1座標)に子ウィジェットw2を、w2に(20,20)(w2座標)にマウスイベントがある場合、マウスカーソルのグローバル位置は

です

(100,110)+(10,10)+(20,20)=(130,140)(画面座標)

これはw2-> mapToGlobal(mousePos)です。

W2-> mapTo(W1、mousePos)又は、W1はW2の親であるように、W2-> mapToParent(mousePos)は

(10,10)+(20,20)=(30,30あります)(w1座標)。

すべてをグローバル座標に変換して計算し、その結果をウィジェット、つまり必要なコンテキストにマップするのが最も簡単かもしれません。