私は複数の子を含むQWidgetを持っています。究極の目標は、あるウィジェットから別のウィジェットにドラッグアンドドロップし、ウィジェット間で何かを動かすことです。親ウィジェットのコントローラーに信号が発せられ、ドラッグがいつ開始して正しく終了するかを判断できます。私の現在の問題は、マウスが上向きのときにターゲットウィジェットの上にマウスがあるかどうかを判断することです。Qt - 絶対ウィジェットとカーソル位置を決定する
ドキュメント内でunderMouseを見たときに興奮しましたが、ドラッグアンドドロップイベント(テストしたときに間違った値を返したようです)では機能しません。これに失敗した私の目標は、ターゲットウィジェットを含む矩形を見つけ、マウス上にマウス座標が含まれているかどうかを調べることでした。 contentsRectを単に使うことはできません。なぜなら、呼び出されているウィジェットに相対的な位置を返すからです。私はmapToGlobalが私に絶対画面のピクセル値を与えるだろうと思ったが、それでも失敗する。親ウィジェットのウィンドウでmapToを呼び出そうとしましたが、それも失敗したようです。
以下は、さまざまな方法で得られたさまざまなQRectとQPointを示すコードです。たぶん、そのうちの1つに単純なエラーがあるので、それらをすべて提供しました。
QRect relativeWidgetRect = targetWidget->contentsRect();
QRect *absoluteWidgetRect = new QRect(QWidget::mapToGlobal(relativeWidgetRect.topLeft()), QWidget::mapToGlobal(relativeWidgetRect.bottomRight()));
QRect *widgetRect = new QRect(mapTo(window(), relativeWidgetRect.topLeft()), mapTo(window(), relativeWidgetRect.bottomRight()));
QPoint relativeMousePos = QCursor::pos();
QPoint absoluteMousePos = QWidget::mapToGlobal(relativeMousePos);
QPoint widgetMousePos = mapTo(window(), relativeMousePos);
mapToParentターゲットウィジェットが実際に最上位の親の子が親にされているので、私の目的のために動作しません。
更新ここで、作業が終了したコードがあります。私のトップレベルのウィジェットでは(つまり、ソースとターゲットの両方のウィジェットの祖先だった)、私はこれを追加しました:たぶん、あなたはQWidgetの中geometry()
またはframeGeometry()
ため
QRect widgetRect = targetWidget->Geometry();
QPoint mousePos = targetWidget->mapFromGlobal(QCursor::pos());
if(widgetRect.contains(mousePos))
{
// Logic
}
アハあるとして例を含め、ありがとうございました!私は私の問題を解決したコードで私の質問を更新しました。 –