2012-02-12 16 views
1

我已經在網上搜索瞭解可能性,但沒有找到解決方案。是否有一種從列表中刪除項目的簡單方法,該項目會丟棄在非接收區域或者應用程序窗口之外?通過將它從QListWidget中移除到窗口小部件外部來移除它?

到目前爲止,我接受了刪除鍵通過快捷方式刪除項:

QShortcut *shortcut = new QShortcut(QKeySequence(Qt::Key_Delete), myList); 
shortcut->setContext(Qt::WidgetShortcut); 
connect(shortcut, SIGNAL(activated()), this, SLOT(deleteSelection())); 

但自從我將項目添加到通過拖拽列表中,我希望能夠消除他們同樣的方式也是如此。列表中的項目也可以通過拖放進行排序。

任何提示或鏈接表示讚賞。

+0

刪除它們dragLeaveEvent而不是dropEvent – 2012-02-13 08:57:26

+0

@KamilKlimek所以你認爲我將不得不繼承小部件才能做到這一點?沒有其他辦法嗎?我會認爲這是一個非常標準的東西,希望從QListWidget。 – steps 2012-02-20 21:18:44

+1

嘗試安裝事件過濾器並從中捕獲dropEvent – 2012-02-21 22:43:19

回答

1

這似乎爲我工作:

  • 拖動和拖放動作要Qt::MoveAction
  • 確保母公司的QListWidget(例如,QDialog)有以下幾點:
    • dragEnterEvent()實施
    • dropEvent()實施(忽略此處的啞音數據)
    • setAcceptDrops(true);

忽略在dropEvent()的mime數據在Qt::MoveAction應相當於一個項目中刪除的操作。

祝你好運!

+0

在Qt設計器中,我將所有屬性設置爲您建議的內容,並在列表窗口小部件上安裝事件過濾器,如Kamil所說,捕獲dragEnter/dragLeave/dropEvents但是一個事件被解僱的場合似乎對我來說幾乎是隨機的。例如dragLeaveEvent似乎根本不會被解僱。事件過濾器方法對我來說很有意義,而且被解僱或不被解僱的事件似乎是一個非常特殊的問題,所以我發佈了一個更詳細的問題[here](http://www.qtcentre.org/threads/47939-Cant -catch-DragLeaveEvent /),以防你感興趣。謝謝你的幫助! – steps 2012-03-13 10:38:11

相關問題