пытаюсь сделать перетаскивание из QListWidget в QTreeWidget. драгается нормально, курсор меняется и если кинуть куда нибудь за пределы формы то текст вставляется.
но если перетащить на мой QTreeWidget, dragEnterEvent срабатывает, в нем я делаю
event->acceptProposedAction()
но нифига не происходит, курсор остается со знаком запрета дропа. dropEvent вообще никогда не вызывается соответственно.
QListWidget
void QDragListWidget::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton)
m_dragStartPosition = event->pos();
}
void QDragListWidget::mouseMoveEvent(QMouseEvent *event)
{
if (!(event->buttons() & Qt::LeftButton))
return;
if ((event->pos() - m_dragStartPosition).manhattanLength() < QApplication::startDragDistance())
return;
QListWidgetItem *item = this->itemAt(event->pos());
if (item != NULL)
{
qDebug() << "Starting drag";
QDrag *drag = new QDrag(this);
QMimeData *mimeData = new QMimeData;
mimeData->setText("text/html");
drag->setMimeData(mimeData);
drag->setPixmap(QPixmap(":/icons/icons/cog.png"));
Qt::DropAction dropAction = drag->exec(Qt::MoveAction);
qDebug() << "drag end "<< dropAction;
}
}
QTreeWidget
void QDropTreeWidget::dragEnterEvent(QDragEnterEvent *event)
{
event->acceptProposedAction();
qDebug() << "acceptProposedAction " << event->dropAction();
}
void QDropTreeWidget::dropEvent(QDropEvent *event)
{
event->acceptProposedAction();
qDebug() << "drop";
}
в QTreeWidget, setAcceptDrops(true) стоит в конструкторе
хз куда копать
всё оказалось просто. надо перегружать еще и dragMoveEvent.
ответ нашел тут
http://www.qtcentre.org/forum/f-qt-programming-2/t-i-receive-qdragenterevent-but-not-qdropevent-25117.html/?highlight=drag