logplus/logPlus/preqtablewidget.cpp

513 lines
19 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "preqtablewidget.h"
#include <QMouseEvent>
#include <QDebug>
#include <QApplication>
#include <QMimeData>
#include <QDrag>
#include <QWidget>
#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<PreQTableWidget *>(event->source());
if (source && source != this) {
event->setDropAction(Qt::MoveAction);
event->accept();
}
//
QMyTreeWidget *sourceTree = qobject_cast<QMyTreeWidget *>(event->source());
if (sourceTree) {
event->setDropAction(Qt::MoveAction);
event->accept();
}
}
void PreQTableWidget::dragMoveEvent(QDragMoveEvent *event)
{
qDebug()<<"PreQTableWidget dragMoveEvent";
PreQTableWidget *source = qobject_cast<PreQTableWidget *>(event->source());
if (source && source != this) {
event->setDropAction(Qt::MoveAction);
event->accept();
}
//
QMyTreeWidget *sourceTree = qobject_cast<QMyTreeWidget *>(event->source());
if (sourceTree) {
event->setDropAction(Qt::MoveAction);
event->accept();
}
}
void PreQTableWidget::dropEvent(QDropEvent *event)
{
qDebug()<<"PreQTableWidget dropEvent";
PreQTableWidget *source = qobject_cast<PreQTableWidget *>(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);
}
else if(strType=="depthObject")
{
qDebug() << "新建深度";
//新建曲线
emit CallManage::getInstance()->sig_AddDepth(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName);
}
else if(strType=="ganzhuangtuObject")
{
//新建杆状图
emit CallManage::getInstance()->sig_AddGanZhuangTu(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName);
}
else if(strType=="JyktObject")
{
//新建井眼垮塌矢量图
emit CallManage::getInstance()->sig_AddJykt(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName);
}
else if(strType=="DenvObject")
{
//新建井斜方位图
emit CallManage::getInstance()->sig_AddDenv(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName);
}
else if(strType=="DrawImageObject")
{
//图像 成图
emit CallManage::getInstance()->sig_AddDrawImage(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName);
}
else if(strType=="SantuyibiaoObject")
{
//斜井三图一表
emit CallManage::getInstance()->sig_AddSantuyibiao(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName);
}
else if(strType=="CrackObject")
{
//裂缝
emit CallManage::getInstance()->sig_AddCrack(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName);
}
else if(strType=="JiegutextObject")
{
//删除表格
// emit CallManage::getInstance()->sig_delTableLine(m_strUuid, strWellName, strTrackName, strLineName);
//气测/FMT/射孔/文本
emit CallManage::getInstance()->sig_AddJiegutext(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName);
}
else if(strType=="LogfaceObject")
{
//删除表格
// emit CallManage::getInstance()->sig_delTableLine(m_strUuid, strWellName, strTrackName, strLineName);
//沉积相
emit CallManage::getInstance()->sig_AddLogface(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName);
}
else if(strType=="MCalsObject")
{
//多臂井径
emit CallManage::getInstance()->sig_AddMCals(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName);
}
else if(strType=="TubingstringObject")
{
//删除表格
// emit CallManage::getInstance()->sig_delTableLine(m_strUuid, strWellName, strTrackName, strLineName);
//套管组件
emit CallManage::getInstance()->sig_AddTubingstring(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<QMyTreeWidget *>(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);
}
else if(strType=="depthObject")
{
qDebug() << "新建深度";
//新建曲线
emit CallManage::getInstance()->sig_AddDepth(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName);
}
else if(strType=="ganzhuangtuObject")
{
//新建杆状图
emit CallManage::getInstance()->sig_AddGanZhuangTu(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName);
}
else if(strType=="JyktObject")
{
//新建井眼垮塌矢量图
emit CallManage::getInstance()->sig_AddJykt(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName);
}
else if(strType=="DenvObject")
{
//新建井斜方位图
emit CallManage::getInstance()->sig_AddDenv(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName);
}
else if(strType=="DrawImageObject")
{
//图像 成图
emit CallManage::getInstance()->sig_AddDrawImage(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName);
}
else if(strType=="SantuyibiaoObject")
{
//斜井三图一表
emit CallManage::getInstance()->sig_AddSantuyibiao(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName);
}
else if(strType=="CrackObject")
{
//裂缝
emit CallManage::getInstance()->sig_AddCrack(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName);
}
else if(strType=="JiegutextObject")
{
//气测/FMT/射孔/文本
emit CallManage::getInstance()->sig_AddJiegutext(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName);
}
else if(strType=="LogfaceObject")
{
//沉积相
emit CallManage::getInstance()->sig_AddLogface(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName);
}
else if(strType=="MCalsObject")
{
//多臂井径
emit CallManage::getInstance()->sig_AddMCals(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName);
}
else if(strType=="TubingstringObject")
{
//套管组件
emit CallManage::getInstance()->sig_AddTubingstring(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)
{
// 处理拖拽结束的逻辑,例如从界面上移除拖拽的项
// 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);
}
else if(strType=="depthObject")
{
//深度
}
else if(strType=="ganzhuangtuObject")
{
//杆状图
}
else if(strType=="JyktObject")
{
//井眼垮塌矢量图
}
else if(strType=="DenvObject")
{
//井斜方位图
}
else if(strType=="DrawImageObject")
{
//图像 成图
}
else if(strType=="SantuyibiaoObject")
{
//斜井三图一表
}
else if(strType=="CrackObject")
{
//裂缝
}
else if(strType=="JiegutextObject")
{
//气测/FMT/射孔/文本
//删除表格
emit CallManage::getInstance()->sig_delTableLine(m_strUuid, formInfo->m_strWellName, formInfo->m_strTrackName, formInfo->m_strLineName);
}
else if(strType=="LogfaceObject")
{
//沉积相
//删除表格
emit CallManage::getInstance()->sig_delTableLine(m_strUuid, formInfo->m_strWellName, formInfo->m_strTrackName, formInfo->m_strLineName);
}
else if(strType=="MCalsObject")
{
//多臂井径
}
else if(strType=="TubingstringObject")
{
//套管组件
//删除表格
emit CallManage::getInstance()->sig_delTableLine(m_strUuid, formInfo->m_strWellName, formInfo->m_strTrackName, 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<float> listMin;
QList<float> 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);
if(formInfo->m_strType == "curveObject")
PropertyService()->initCurveProperty(formInfo, strListOtherLine, listMin, listMax, strListOtherScaleType);
else
PropertyService()->initProperty(formInfo);
//曲线置顶显示,激活可选
emit CallManage::getInstance()->sig_Raise(m_strUuid, formInfo->m_strSlfName, formInfo->m_strWellName, formInfo->m_strTrackName, formInfo->m_strLineName, 3, formInfo->m_strType);
}
}
}
QStringList PreQTableWidget::getListLineName(QString strLineName, QList<float> &listMin, QList<float> &listMax, QStringList &strListOtherScaleType)
{
QStringList strListOtherLine;
for(int i=0; i<rowCount(); i++)
{
if( cellWidget(i, 0) != nullptr )
{
auto myWidget = cellWidget(i, 0);
FormInfo *formInfo = (FormInfo*)myWidget;//获得widget
QString strTmp = formInfo->m_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;
}