logplus/logPlus/preqtablewidget.cpp

335 lines
11 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);
}
//
//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);
}
//
//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<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);
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<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;
}