通过将它从QListWidget中移除到窗口小部件外部来移除它?
我已经在网上搜索了解可能性,但没有找到解决方案。是否有一种从列表中删除项目的简单方法,该项目会丢弃在非接收区域或者应用程序窗口之外?通过将它从QListWidget中移除到窗口小部件外部来移除它?
到目前为止,我接受了删除键通过快捷方式删除项:
QShortcut *shortcut = new QShortcut(QKeySequence(Qt::Key_Delete), myList);
shortcut->setContext(Qt::WidgetShortcut);
connect(shortcut, SIGNAL(activated()), this, SLOT(deleteSelection()));
但自从我将项目添加到通过拖拽列表中,我希望能够消除他们同样的方式也是如此。列表中的项目也可以通过拖放进行排序。
任何提示或链接表示赞赏。
这似乎为我工作:
- 拖动和拖放动作要
Qt::MoveAction
- 确保母公司的
QListWidget
(例如,QDialog
)有以下几点:-
dragEnterEvent()
实施 -
dropEvent()
实施(忽略此处的哑音数据) setAcceptDrops(true);
-
忽略在dropEvent()
的mime数据在Qt::MoveAction
应相当于一个项目中删除的操作。
祝你好运!
在Qt设计器中,我将所有属性设置为您建议的内容,并在列表窗口小部件上安装事件过滤器,如Kamil所说,捕获dragEnter/dragLeave/dropEvents但是一个事件被解雇的场合似乎对我来说几乎是随机的。例如dragLeaveEvent似乎根本不会被解雇。事件过滤器方法对我来说很有意义,而且被解雇或不被解雇的事件似乎是一个非常特殊的问题,所以我发布了一个更详细的问题[here](http://www.qtcentre.org/threads/47939-Cant -catch-DragLeaveEvent /),以防你感兴趣。谢谢你的帮助! – steps 2012-03-13 10:38:11
删除它们dragLeaveEvent而不是dropEvent – 2012-02-13 08:57:26
@KamilKlimek所以你认为我将不得不继承小部件才能做到这一点?没有其他办法吗?我会认为这是一个非常标准的东西,希望从QListWidget。 – steps 2012-02-20 21:18:44
尝试安装事件过滤器并从中捕获dropEvent – 2012-02-21 22:43:19