2014-09-25 57 views
0

我在我的MainWindow中有一个QListView并且可以拖放。为此,我想创建一个Slot女巫正在听拖放事件。但在QT文档中,我没有发现这个事件的信号。我如何创建一个插槽或以某种方式倾听拖放事件?QListview拖放插槽

编辑:我只是想在ListView中使用拖放来重新排序项目,只是听这个事件。

+0

在这里查看 - http://qt-project.org/doc/qt-5/dnd.html – 2014-09-25 06:16:54

回答

1

Drag and Drop的实现需要在所有支持它的小部件中执行拖动操作和放置操作。

为了实现拖动操作的最佳方法是使用鼠标事件处理函数的重载在widgets应该能够拖动:

void DragWidget::mousePressEvent(QMouseEvent *event) 
{ 
    if (event->button() == Qt::LeftButton) 
     dragStartPosition = event->pos(); 
} 

void DragWidget::mouseMoveEvent(QMouseEvent *event) 
{ 
    if (!(event->buttons() & Qt::LeftButton)) 
     return; 
    if ((event->pos() - dragStartPosition).manhattanLength() 
     < QApplication::startDragDistance()) 
     return; 

    QDrag *drag = new QDrag(this); 
    QMimeData *mimeData = new QMimeData; 

    mimeData->setData(mimeType, data); 
    drag->setMimeData(mimeData); 

    Qt::DropAction dropAction = drag->exec(Qt::CopyAction | Qt::MoveAction); 
    ... 
} 

为了能够进行直接的事件,它的需要来标记与setAcceptDrops部件(true)和过载dragEnterEvent()和dropEvent()事件处理函数。例如:

Window::Window(QWidget *parent) 
    : QWidget(parent) 
{ 
    ... 
    setAcceptDrops(true); 
} 

void Window::dropEvent(QDropEvent *event) 
{ 
    textBrowser->setPlainText(event->mimeData()->text()); 
    mimeTypeCombo->clear(); 
    mimeTypeCombo->addItems(event->mimeData()->formats()); 

    event->acceptProposedAction(); 
} 

您可以在此找到关于此here的完整文档。