在dragMoveEvent事件中setDropAction方法有什么用?
这段代码是从书上copy下来的,但是我不太清楚什么意思,尤其是dragMoveEvent事件中的setDropAction方法。
下面简称ProjectListWidget为PListWidget。
程序的功能是自定义一个ProjectListWidget控件,继承自ListWidget。它可以支持 在同一个程序中,从一个PListWidget拖动一项到另一个PListWidget中。
如图:
class ProjectListWidget : public ListWidget
{
......
}
void ProjectListWidget::dragEnterEvent (QDragEnterEvent *event)
{
ProjectListWidget *source = qobject_cast<ProjectListWidget *> (event->source ()) ;
if (source && source != this)
{
//应该是允许接收Move动作的意思
event->setDropAction (Qt::MoveAction) ;
//这里如果不执行accept的话,就不能拖放到ProjectListWidget中
event->accept () ;
}
}
void ProjectListWidget::dragMoveEvent (QDragMoveEvent *event)
{
ProjectListWidget *source = qobject_cast<ProjectListWidget *> (event->source ()) ;
if (source && source != this)
{
//暂时不懂什么意思,有和没有的效果一样,很无语
event->setDropAction (Qt::MoveAction) ;
event->accept () ;
}
}
void ProjectListWidget::dropEvent (QDropEvent *event)
{
ProjectListWidget *source = qobject_cast<ProjectListWidget *> (event->source ()) ;
if (source && source != this)
{
addItem (event->mimeData ()->text ()) ;
//同样不懂什么意思,有和没有都能完成拖放动作...
event->setDropAction (Qt::MoveAction) ;
event->accept () ;
}
}