2014-09-25 58 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的完整文檔。