【发布时间】:2018-08-22 12:10:55
【问题描述】:
我想在我的项目中执行拖放功能。我有一个列表小部件作为(缩略图)。而且,我想从缩略图中拖动图像并将图像作为(QVTKOpenGlWidget)拖放到网格布局中。我已经使用了这个代码。但不幸的是,我无法拖放。
代码:
void mainwindow::dragEnterEvent(QDragEnterEvent *e)
{
if (e->mimeData()->hasFormat("application/x-dnditemdata")) {
if (e->source() == this) {
e->setDropAction(Qt::MoveAction);
e->accept();
}
else {
e->acceptProposedAction();
}
}
else {
e->ignore();
}
}
void mainwindow::dragMoveEvent(QDragMoveEvent *event)
{
if (event->mimeData()->hasFormat("application/x-dnditemdata")) {
if (event->source() == this) {
event->setDropAction(Qt::MoveAction);
event->accept();
}
else {
event->acceptProposedAction();
}
}
else {
event->ignore();
}
}
void mainwindow::dropEvent(QDropEvent *e)
{
if (e->mimeData()->hasFormat("application/x-dnditemdata")) {
QByteArray itemData = e->mimeData()->data("application/x-dnditemdata");
QDataStream dataStream(&itemData, QIODevice::ReadOnly);
QPalette pixmap;
QPoint offset;
dataStream >> pixmap >> offset;
this->ui->view1->setPalette(pixmap);
this->ui->view1->move(e->pos() - offset);
this->ui->view1->show();
this->ui->view1->setAttribute(Qt::WA_DeleteOnClose);
if (e->source() == this) {
e->setDropAction(Qt::MoveAction);
e->accept();
}
else {
e->acceptProposedAction();
}
}
else {
e->ignore();
}
}
任何帮助对我来说都非常有用。 提前谢谢你
【问题讨论】:
-
到目前为止你尝试过什么?
Qtdocumentation 有许多拖放示例。 -
我会尝试各种方法,例如 mousePressEvent(QMouseEvent *event)、mousePressEvent(QMouseEvent *event)、mouseMoveEvent(QMouseEvent *event)、dropEvent(QDropEvent *event)。但是,它不适合我
-
首先,我将为所有 4 个视口启用(acceptDrop()) 方法。然后我将应用所有与拖放事件相关的方法。
-
建议将描述 I will enable(acceptDrop()) 方法为所有 4 个视口... 使用代码而不是注释放入您的问题中。
-
@AmarKumar,从您的代码中我看到您重新实现了 MainWindow 的拖放事件。你不应该重新实现 QOpenGlWidget 的拖放事件吗?让我为你准备一个例子来说明我的意思。
标签: c++ qt drag-and-drop