#include "preqtablewidget.h" #include #include #include #include #include #include #include "CallManage.h" #include "PropertyWidget.h" //针对曲线 PreQTableWidget::PreQTableWidget(QWidget *parent) : QTableWidget(parent) { setSelectionBehavior(QAbstractItemView::SelectRows); setAcceptDrops(true); connect(this, SIGNAL(itemSelectionChanged()), this, SLOT(ChangedItem())); } void PreQTableWidget::mousePressEvent(QMouseEvent *event) { qDebug()<<"PreQTableWidget mousePressEvent"; if (event->button() == Qt::LeftButton) { startPos = event->pos(); m_press = true; } QTableWidget::mousePressEvent(event); } void PreQTableWidget::ChangedItem() { qDebug()<<"PreQTableWidget itemSelectionChanged!"; } void PreQTableWidget::mouseMoveEvent(QMouseEvent *event) { qDebug()<<"PreQTableWidget mouseMoveEvent"; if (event->buttons() & Qt::LeftButton) { int distance = (event->pos() - startPos).manhattanLength(); if (distance >= QApplication::startDragDistance()) { performDrag(); } } QTableWidget::mouseMoveEvent(event); } void PreQTableWidget::dragEnterEvent(QDragEnterEvent *event) { qDebug()<<"PreQTableWidget dragEnterEvent"; PreQTableWidget *source = qobject_cast(event->source()); if (source && source != this) { event->setDropAction(Qt::MoveAction); event->accept(); } // QMyTreeWidget *sourceTree = qobject_cast(event->source()); if (sourceTree) { event->setDropAction(Qt::MoveAction); event->accept(); } } void PreQTableWidget::dragMoveEvent(QDragMoveEvent *event) { qDebug()<<"PreQTableWidget dragMoveEvent"; PreQTableWidget *source = qobject_cast(event->source()); if (source && source != this) { event->setDropAction(Qt::MoveAction); event->accept(); } // QMyTreeWidget *sourceTree = qobject_cast(event->source()); if (sourceTree) { event->setDropAction(Qt::MoveAction); event->accept(); } } void PreQTableWidget::dropEvent(QDropEvent *event) { qDebug()<<"PreQTableWidget dropEvent"; PreQTableWidget *source = qobject_cast(event->source()); if (source && source != this) { QString strExtern = event->mimeData()->text(); // QStringList list = strExtern.split("#@@#");//QString字符串分割函数 if (list.size() > 3) { QString strSlfName = list[0]; QString strWellName = list[1]; QString strLineName = list[2]; QString strType = list[3]; qDebug() << "source strSlfName:" << strSlfName<< " strWellName:" << strWellName << " strLineName:" << strLineName << " strType:" << strType; if(m_strWellName == strWellName) { m_AddSuc = true; if(strType=="curveObject") { //新建曲线 emit CallManage::getInstance()->sig_AddLine(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName); } else if(strType=="waveObject") { //新建波列 emit CallManage::getInstance()->sig_AddWave(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName); } else if(strType=="tableObject") { //新建表格曲线 emit CallManage::getInstance()->sig_AddTableLine(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName); } // //m_listLineName.push_back(strLineName); // 接受拖拽事件 event->setDropAction(Qt::MoveAction); event->accept(); } else { // 如果井名不正确,不接受拖拽事件 event->ignore(); } } else { int rownum = rowCount(); setRowCount(rownum+1); // QTableWidgetItem* item = new QTableWidgetItem(strExtern); item->setFlags(item->flags() & (~Qt::ItemIsEditable)); item->setTextAlignment(Qt::AlignCenter); //设置文本居中 // setItem(rownum, 0, item); // event->setDropAction(Qt::MoveAction); event->accept(); } } // QMyTreeWidget *sourceTree = qobject_cast(event->source()); if (sourceTree) { QString strExtern = event->mimeData()->text(); // QStringList list = strExtern.split("#@@#");//QString字符串分割函数 if (list.size() > 3) { QString strSlfName = list[0]; QString strWellName = list[1]; QString strLineName = list[2]; QString strType = list[3]; qDebug() << "sourceTree strSlfName:" << strSlfName<< " strWellName:" << strWellName << " strLineName:" << strLineName << " strType:" << strType; if(m_strWellName == strWellName) { m_AddSuc = true; if(strType=="curveObject") { //新建曲线 emit CallManage::getInstance()->sig_AddLine(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName); } else if(strType=="waveObject") { //新建波列 emit CallManage::getInstance()->sig_AddWave(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName); } else if(strType=="tableObject") { //新建表格曲线 emit CallManage::getInstance()->sig_AddTableLine(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName); } // //m_listLineName.push_back(strLineName); // 接受拖拽事件 event->setDropAction(Qt::MoveAction); event->accept(); } else { // 如果井名不正确,不接受拖拽事件 event->ignore(); } } } } void PreQTableWidget::performDrag() { qDebug()<<"PreQTableWidget performDrag!"; int iCurrentRow = currentRow(); if( cellWidget(iCurrentRow, 0) != nullptr ) { auto myWidget = cellWidget(currentRow(), 0); FormInfo *formInfo = (FormInfo*)myWidget;//获得widget QString strType = formInfo->m_strType; //if(strType == "curveObject" || strType == "waveObject") { //曲线对象(AC、BS...) QMimeData *mimeData = new QMimeData; // 这里需要根据你的item数据来设置mimeData,例如: mimeData->setText(formInfo->m_strSlfName + "#@@#"+ formInfo->m_strWellName + "#@@#" +formInfo->m_strLineName + "#@@#" + strType); // 创建QDrag对象 QDrag *drag = new QDrag(this); drag->setMimeData(mimeData); // 可以设置拖拽时的光标图标 QRect itemRect = visualItemRect(currentItem()); // 获取项的矩形区域 QPixmap itemPixmap = QWidget::grab(itemRect);//QPixmap::grabWidget(this, itemRect); // 获取项的屏幕截图 // 调整拖拽光标的热点,使其位于截图的中心 drag->setPixmap(itemPixmap); // 执行拖拽操作 m_AddSuc = false; Qt::DropAction dropAction = drag->exec(Qt::MoveAction); if (dropAction == Qt::MoveAction) { //&& m_AddSuc // 处理拖拽结束的逻辑,例如从界面上移除拖拽的项 removeRow(iCurrentRow); if(strType=="curveObject") { //删除曲线 emit CallManage::getInstance()->sig_delLine(m_strUuid, formInfo->m_strWellName, formInfo->m_strTrackName, formInfo->m_strLineName); } else if(strType=="waveObject") { //删除波列 emit CallManage::getInstance()->sig_delWave(m_strUuid, formInfo->m_strWellName, formInfo->m_strTrackName, formInfo->m_strLineName); } else if(strType=="tableObject") { //删除波列 emit CallManage::getInstance()->sig_delTableLine(m_strUuid, formInfo->m_strWellName, formInfo->m_strTrackName, formInfo->m_strLineName); } // //m_listLineName.removeOne(formInfo->m_strLineName); } } } // if(!currentItem()) // { // return; // } // QString strExtern = currentItem()->text(); // QMimeData *mimeData = new QMimeData; // mimeData->setText(strExtern); // QDrag *drag = new QDrag(this); // drag->setMimeData(mimeData); // if (drag->exec(Qt::MoveAction) == Qt::MoveAction){ // qDebug()<<"Success!"; // } } void PreQTableWidget::mouseReleaseEvent(QMouseEvent *event) { if(m_press)//如果鼠标左键被释放 { qDebug()<<"PreQTableWidget mouseReleaseEvent"; m_press = false;//按下标志置fasle,形成互斥 int iCurrentRow = currentRow(); qDebug()<<"PreQTableWidget mouseReleaseEvent, iCurrentRow=" << QString::number(iCurrentRow); if( cellWidget(iCurrentRow, 0) != nullptr ) { auto myWidget = cellWidget(currentRow(), 0); FormInfo *formInfo = (FormInfo*)myWidget;//获得widget // QList listMin; QList listMax; QStringList strListOtherScaleType; QStringList strListOtherLine = getListLineName(formInfo->m_strLineName, listMin, listMax, strListOtherScaleType); //PropertyService()->initCurveProperty(formInfo->m_strSlfName, formInfo->m_strWellName, formInfo->m_strTrackName, formInfo->m_strLineName, formInfo->m_lineColor, formInfo->m_dWidth, strListOtherLine); PropertyService()->initCurveProperty(formInfo, strListOtherLine, listMin, listMax, strListOtherScaleType); //曲线置顶显示,激活可选 emit CallManage::getInstance()->sig_Raise(m_strUuid, formInfo->m_strSlfName, formInfo->m_strWellName, formInfo->m_strTrackName, formInfo->m_strLineName); } } } QStringList PreQTableWidget::getListLineName(QString strLineName, QList &listMin, QList &listMax, QStringList &strListOtherScaleType) { QStringList strListOtherLine; for(int i=0; im_strLineName; if(strTmp!=strLineName) { strListOtherLine.push_back(strTmp); listMin.push_back(formInfo->m_vmin); listMax.push_back(formInfo->m_vmax); strListOtherScaleType.push_back(formInfo->m_strScaleType); } } } return strListOtherLine; }