拖动操作分为拖动和放下两种状态
拖动状态主要关于两个事件
void CTreeWidget::mousePressEvent(QMouseEvent *ev)
{
qDebug()<<"Enter mousePressEvent";
if (ev->button() == Qt::LeftButton)
{
m_beginDragPoint = ev->pos();
}
QTreeWidget::mousePressEvent(ev);
}
void CTreeWidget::mouseMoveEvent(QMouseEvent *ev)
{
qDebug()<<"Enter mouseMoveEvent";
if (ev->buttons() & Qt::LeftButton)
{
int dragDistance = (ev->pos() - m_beginDragPoint).manhattanLength();
if (dragDistance > QApplication::startDragDistance())
{
QByteArray data;
QDataStream stream(&data,QIODevice::WriteOnly);
stream << "ccc"<<"0";
QMimeData *mimeData = new QMimeData;
mimeData->setData("camera-info",data);
QDrag *drag = new QDrag(this);
drag->setMimeData(mimeData);
// drag->setPixmap(QPixmap(":/res/monitor/drag_play"));
drag->exec();
}
}
QTreeWidget::mouseMoveEvent(ev);
}
放下状态也是关于两个事件
void CTreeWidget::dragEnterEvent(QDragEnterEvent *ev)
{
if(ev->mimeData()->hasFormat("camera-info"))
ev->acceptProposedAction();
}
void CTreeWidget::dropEvent(QDropEvent *ev)
{
QByteArray data = ev->mimeData()->data("camera-info");
QDataStream stream(&data,QIODevice::ReadOnly);
QString cameraId;
QString cameraType;
QString cameraName;
int login_handle;
stream >>cameraId >>cameraType >>login_handle >>cameraName;
QString info="camraName:"+cameraName+" cameraId:"+cameraId+" cameraType:"+cameraType;
qDebug()<<">------ drop:"<<info;
emit dropCamera_signal(cameraName,cameraId,cameraType,login_handle);
}
其他要执行的处理就是在这四个函数里添加
C++交流群:585225803