通过将它从QListWidget中移除到窗口小部件外部来移除它?

问题描述:

我已经在网上搜索了解可能性,但没有找到解决方案。是否有一种从列表中删除项目的简单方法,该项目会丢弃在非接收区域或者应用程序窗口之外?通过将它从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

这似乎为我工作:

  • 拖动和拖放动作要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