0
我在我的MainWindow中有一个QListView并且可以拖放。为此,我想创建一个Slot女巫正在听拖放事件。但在QT文档中,我没有发现这个事件的信号。我如何创建一个插槽或以某种方式倾听拖放事件?QListview拖放插槽
编辑:我只是想在ListView中使用拖放来重新排序项目,只是听这个事件。
我在我的MainWindow中有一个QListView并且可以拖放。为此,我想创建一个Slot女巫正在听拖放事件。但在QT文档中,我没有发现这个事件的信号。我如何创建一个插槽或以某种方式倾听拖放事件?QListview拖放插槽
编辑:我只是想在ListView中使用拖放来重新排序项目,只是听这个事件。
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的完整文档。
在这里查看 - http://qt-project.org/doc/qt-5/dnd.html – 2014-09-25 06:16:54