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:
{
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) {
QString fileName
= parentItem
->text
(TAG_COLUMN
);
// Prepare for dragging
dataStream << fileName << name << seq << type;
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();
;
}
}
{
if (event->mimeData()->hasFormat("curveData/x-curveData"))
{
event->acceptProposedAction();
event->accept();
}
else
{
event->ignore();
}
}
{
if( event->mimeData()->hasFormat("curveData/x-curveData")){
event->acceptProposedAction();
event->accept();
}
else
{
event->ignore();
}
}
Accept drop:
{
if (event->mimeData()->hasFormat("curveData/x-curveData")) {
QByteArray byteArray
= event
->mimeData
()->data
("curveData/x-curveData");
dataStream >> fileName >> name >> seq >> type;
emit addCurve(fileName, name, seq, type, this);
event->acceptProposedAction();
event->accept();
} else {
event->ignore();
}
}
{
if ( event->mimeData()->hasFormat("curveData/x-curveData")) {
event->setDropAction(Qt::MoveAction);
event->accept();
} else {
event->ignore();
}
}
{
if (event->mimeData()->hasFormat("curveData/x-curveData")) {
event->setDropAction(Qt::MoveAction);
event->accept();
} else {
event->ignore();
}
}
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();
}
}
To copy to clipboard, switch view to plain text mode
Bookmarks