この障害(QTBUG-46287)は修正済みです。
Qt5には、モーダルウィジェットが存在してもメインウィンドウがドロップイベントを受け付けてしまうというバグがあります。
回避するには、異常なDragEnter
イベントを止めるイベントフィルターを作り、QApplication
へインストールします。
- アクティブなモーダルウィジェットが存在するとき、
DragEnter
イベントを無視する - ただし、 アクティブなモーダルウィジェットに対して発生したものは受理する
DragEnter
を無視するとドロップもできなくなり、マウスカーソルがドロップを受け付けるアイコンになりません。
実装例は以下の通りです。
class DragEventEater : public QObject
{
public:
DragEventEater(QObject* parent): QObject(parent) {}
protected:
bool eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::DragEnter)
{
if (QObject* modalWidget = QApplication::activeModalWidget())
{
for (; obj; obj = obj->parent())
{
if (obj == modalWidget)
{
return false;
}
};
return true;
}
}
return false;
}
};