QMdiAreaを使ってMDI内のウィンドウごとにドラッグアンドドロップを制御する方法を模索していたのですが、なかなか簡単な方法が見つからないので、最終的にドラッグアンドドロップをした座標にMDIの子ウィンドウがあるかどうかを識別して、子ウィンドウごとのドロップ時の挙動を制御することにしました。
具体的には下記のような関数を作って子ウィンドウの有無を識別しました。
bool IsOnWidget( QPoint pos, const QWidget* widget )
{
if( widget==NULL){ return false; }
QPoint win_pos = widget->pos();
QSize win_size = widget->size();
int win_r_bottom_px = win_pos.x() + win_size.width();
int win_r_bottom_py = win_pos.y() + win_size.height();
return ( (win_pos.x() < pos.x())&& (pos.x() < win_r_bottom_px) )
&& ( (win_pos.y() < pos.y())&& (pos.y() < win_r_bottom_py) );
}
もっと簡単な方法があるかもですが、この方法もそんなに大変ではないので使うのは難しくないです。