lwz
28th March 2014, 09:45
Using drag and drop to drag tree item to a QwtPlot, sometimes the event becomes invalid.
Please help. Below is the my code about drag and drop.
Drag starts:
void DataTree::mouseMoveEvent(QMouseEvent *event)
{
if (m_currentItem) {
QString name = m_currentItem->text(TITLE_COLUMN);
QString seq = m_currentItem->text(ID_COLUMN);
QString type = m_currentItem->text(TAG_COLUMN);
QString code = m_currentItem->text(CODE_COLUMN);
if (code.length() == 8) {
QTreeWidgetItem *parentItem = m_currentItem->parent();
QString fileName = parentItem->text(TAG_COLUMN);
// Prepare for dragging
QDrag *drag = new QDrag(this);
QMimeData *mimeData = new QMimeData;
QByteArray byteArray;
QDataStream dataStream(&byteArray, QIODevice::WriteOnly);
dataStream << fileName << name << seq << type;
QSize size(30,30);
QPixmap widgetImage = m_currentItem->icon(0).pixmap(size);
drag->setPixmap(widgetImage);
mimeData->setData("curveData/x-curveData", byteArray);
drag->setMimeData(mimeData);
drag->setHotSpot(QPoint(15,15));
if (!(drag->exec(Qt::MoveAction) == Qt::MoveAction))
{
// event->ignore();
;
}
}
void DataTree::dragEnterEvent(QDragEnterEvent *event)
{
if (event->mimeData()->hasFormat("curveData/x-curveData"))
{
event->acceptProposedAction();
event->accept();
}
else
{
event->ignore();
}
}
void DataTree::dragMoveEvent(QDragMoveEvent *event)
{
if( event->mimeData()->hasFormat("curveData/x-curveData")){
event->acceptProposedAction();
event->accept();
}
else
{
event->ignore();
}
}
Accept drop:
void Plot::dropEvent(QDropEvent *event)
{
if (event->mimeData()->hasFormat("curveData/x-curveData")) {
QByteArray byteArray = event->mimeData()->data("curveData/x-curveData");
QDataStream dataStream(&byteArray, QIODevice::ReadOnly);
QString fileName;
QString name ;
QString seq;
QString type;
dataStream >> fileName >> name >> seq >> type;
emit addCurve(fileName, name, seq, type, this);
event->acceptProposedAction();
event->accept();
} else {
event->ignore();
}
}
void Plot::dragEnterEvent(QDragEnterEvent *event)
{
if ( event->mimeData()->hasFormat("curveData/x-curveData")) {
event->setDropAction(Qt::MoveAction);
event->accept();
} else {
event->ignore();
}
}
void Plot::dragMoveEvent(QDragMoveEvent *event)
{
if (event->mimeData()->hasFormat("curveData/x-curveData")) {
event->setDropAction(Qt::MoveAction);
event->accept();
} else {
event->ignore();
}
}
Please help. Below is the my code about drag and drop.
Drag starts:
void DataTree::mouseMoveEvent(QMouseEvent *event)
{
if (m_currentItem) {
QString name = m_currentItem->text(TITLE_COLUMN);
QString seq = m_currentItem->text(ID_COLUMN);
QString type = m_currentItem->text(TAG_COLUMN);
QString code = m_currentItem->text(CODE_COLUMN);
if (code.length() == 8) {
QTreeWidgetItem *parentItem = m_currentItem->parent();
QString fileName = parentItem->text(TAG_COLUMN);
// Prepare for dragging
QDrag *drag = new QDrag(this);
QMimeData *mimeData = new QMimeData;
QByteArray byteArray;
QDataStream dataStream(&byteArray, QIODevice::WriteOnly);
dataStream << fileName << name << seq << type;
QSize size(30,30);
QPixmap widgetImage = m_currentItem->icon(0).pixmap(size);
drag->setPixmap(widgetImage);
mimeData->setData("curveData/x-curveData", byteArray);
drag->setMimeData(mimeData);
drag->setHotSpot(QPoint(15,15));
if (!(drag->exec(Qt::MoveAction) == Qt::MoveAction))
{
// event->ignore();
;
}
}
void DataTree::dragEnterEvent(QDragEnterEvent *event)
{
if (event->mimeData()->hasFormat("curveData/x-curveData"))
{
event->acceptProposedAction();
event->accept();
}
else
{
event->ignore();
}
}
void DataTree::dragMoveEvent(QDragMoveEvent *event)
{
if( event->mimeData()->hasFormat("curveData/x-curveData")){
event->acceptProposedAction();
event->accept();
}
else
{
event->ignore();
}
}
Accept drop:
void Plot::dropEvent(QDropEvent *event)
{
if (event->mimeData()->hasFormat("curveData/x-curveData")) {
QByteArray byteArray = event->mimeData()->data("curveData/x-curveData");
QDataStream dataStream(&byteArray, QIODevice::ReadOnly);
QString fileName;
QString name ;
QString seq;
QString type;
dataStream >> fileName >> name >> seq >> type;
emit addCurve(fileName, name, seq, type, this);
event->acceptProposedAction();
event->accept();
} else {
event->ignore();
}
}
void Plot::dragEnterEvent(QDragEnterEvent *event)
{
if ( event->mimeData()->hasFormat("curveData/x-curveData")) {
event->setDropAction(Qt::MoveAction);
event->accept();
} else {
event->ignore();
}
}
void Plot::dragMoveEvent(QDragMoveEvent *event)
{
if (event->mimeData()->hasFormat("curveData/x-curveData")) {
event->setDropAction(Qt::MoveAction);
event->accept();
} else {
event->ignore();
}
}