QTreeWidgen in QDockWidget doesn't receive dragEnterEvent when it is undocked
-
Hello, good day,
I have a QTreeWidgen within a QDockWidget that when docked receives and processes of Drag & Drop events correctly, but when it is undocked you receive nothing. Is this normal?
This is the statement:
@
class ListaWidget : public QListWidget
{
Q_OBJECTQPoint dragStartPosition;
public:
ListaWidget(QString nombre, QWidget *parent) : QListWidget(parent) { this->setIconSize(QSize(24,24)); this->setFlow(QListView::LeftToRight); this->setWrapping(true); this->setViewMode(QListView::IconMode); this->setResizeMode(QListView::Adjust); this->setWordWrap(true); this->setObjectName(nombre); setDragEnabled(true); setAcceptDrops(true); } void dragEnterEvent(QDragEnterEvent *event); void dragMoveEvent(QDragMoveEvent *event); void dragLeaveEvent(QDragLeaveEvent *event); void dropEvent(QDropEvent *event); void mousePressEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event);
signals:
void informacion(QString info);
};
@And this is the implementation:
@
//-----------------------------------------------------------------------------void ListaWidget::mousePressEvent(QMouseEvent *event)
{
emit informacion("void ListaWidget::mousePressEvent(QMouseEvent *event)");if (event->button() == Qt::LeftButton) { dragStartPosition = event->pos(); emit informacion("\tQt::LeftButton"); } else if ( event->button() == Qt::RightButton ) { emit informacion("\tQt::RightButton"); }
}
//-----------------------------------------------------------------------------
void ListaWidget::mouseMoveEvent(QMouseEvent *event)
{
if (!(event->buttons() & Qt::LeftButton))
return;
if ((event->pos() - dragStartPosition).manhattanLength()
< QApplication::startDragDistance())
return;emit informacion("void ListaWidget::mouseMoveEvent(QMouseEvent *event)"); QDrag *drag = new QDrag(this); QMimeData *mimeData = new QMimeData; QList <QUrl> urls; QUrl url("file:///E:/Descargas/dcpcrypt2-xe-update2.zip"); emit informacion("\turls.append(url);"); urls.append(url); emit informacion("\tmimeData->setText(this->objectName());"); mimeData->setText(this->objectName()); emit informacion("\tmimeData->setUrls(urls);"); mimeData->setUrls(urls); emit informacion("\tdrag->setMimeData(mimeData);"); drag->setMimeData(mimeData); emit informacion("\tdrag->exec(Qt::CopyAction);"); drag->exec(Qt::CopyAction); emit informacion("\t######## FIN ########");
}
//-----------------------------------------------------------------------------
void ListaWidget::dragEnterEvent(QDragEnterEvent *event)
{
event->acceptProposedAction();
}//-----------------------------------------------------------------------------
void ListaWidget::dragMoveEvent(QDragMoveEvent *event)
{
event->acceptProposedAction();
}//-----------------------------------------------------------------------------
void ListaWidget::dragLeaveEvent(QDragLeaveEvent *event)
{
event->accept();
}//-----------------------------------------------------------------------------
void ListaWidget::dropEvent(QDropEvent *event)
{
emit informacion("void ListaWidget::dropEvent(QDropEvent *event)");if (event->mimeData()->hasText()) { if (event->mimeData()->text() == this->objectName()) { emit informacion("\tSALIENDO de void ListaWidget::dropEvent(QDropEvent *event)"); return; } } // extrae los datos mime del evento const QMimeData *mimeData = event->mimeData(); // identifica el dato mime recibido if (mimeData->hasImage()) emit informacion(tr("\t######## Imagen ########")); else if (mimeData->hasHtml()) emit informacion(tr("\t######## HTML : ") + mimeData->html()); else if (mimeData->hasText()) emit informacion(tr("\t######## TEXT : ") + mimeData->text()); else if (mimeData->hasUrls()) { QList<QUrl> urlList = mimeData->urls(); emit informacion("------------------------------------"); for (int i = 0; i < urlList.size() && i < 32; ++i) { emit informacion(tr("\t") + urlList.at(i).path()); } emit informacion("------------------------------------"); } else emit informacion(tr("No se pueden mostrar los datos")); for (int i=0; i<mimeData->formats().count(); i++) emit informacion("\t" + mimeData->formats().value(i)); emit informacion("------------------------------------"); event->acceptProposedAction();
}
//-----------------------------------------------------------------------------
@