2014-06-23 66 views
2

當dragEnterEvent發生時,我需要停止QDrag。我想釋放QDrag而不釋放鼠標按鈕。手動停止QDrag

我試圖發送事件給QDrag沒有運氣。

QMouseEvent* evt = new QMouseEvent(QEvent::MouseButtonRelease,event->pos() ,Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); 
QCoreApplication::sendEvent(drag,evt); 

如何實現這一目標?

更新: 我想在QDragEvent發生時釋放鼠標。

QMouseEvent* finishMoveEvent = new QMouseEvent (QEvent::MouseButtonRelease, event->pos(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); 

QTabBar::mouseReleaseEvent(finishMoveEvent); 

qApp->sendEvent(parentWidget(),finishMoveEvent); 
qApp->sendEvent(drag,finishMoveEvent); 
qApp->postEvent(drag,finishMoveEvent,Qt::HighEventPriority); 

我嘗試了所有可能的組合中的每一行。請幫忙。

如何在QDragEnterEvent期間釋放QDrag。

回答

0

拖動本身不會收到鼠標事件,小部件會這樣做。拖動過濾器/攔截這些事件。您需要將相關事件發送到目標小部件,並希望用戶體驗不會受到影響。

+0

我正在嘗試像subime文本編輯器選項卡功能的東西。您可以撕開標籤,並在標籤欄上自動附加並開始移動標籤。希望這是有道理的。因此,如果QtabWidget在拖動qtabbar時將標籤撕掉,哪個小部件將獲取事件,以便我可以釋放qdrag事件。 – Yash

+0

你可能更適合自己重新實現拖放機制。 'QDrag'有這個奇怪的同步接口(通過'exec()'),通常比它的價值更麻煩。 –

+0

QDrag(在Windows中)exec也阻止了主要事件。我檢查了很多論壇,這是一個問題。 – Yash