#include "FormTrackTop.h" #include "ui_FormTrackTop.h" #include "CallManage.h" #include #include #include #include #include "geometryutils.h" //曲线名称(单个) FormTrackTop::FormTrackTop(QWidget *parent, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, QColor lineColor) : QWidget(parent), ui(new Ui::FormTrackTop) { ui->setupUi(this); // setAcceptDrops(true); m_strSlfName = strSlfName; m_strWellName = strWellName; m_strTrackName = strTrackName; m_font = QFont("微软雅黑", 10); m_fontColor = QColor(0,0,0); } FormTrackTop::~FormTrackTop() { delete ui; } void FormTrackTop::setTrackTopPropert(QJsonObject topObj) { if (topObj.contains("Font")) { QJsonValue value = topObj.value("Font"); this->m_font.fromString(value.toString()); } if (topObj.contains("FontColor")) { QJsonValue value = topObj.value("FontColor"); this->m_fontColor.setNamedColor(value.toString()); } } QJsonObject FormTrackTop::makeJson() { // 创建根对象 QJsonObject rootObj; // rootObj["WellName"] = m_strWellName; // 道名称 rootObj["TrackName"] = m_strTrackName; // 道名称 rootObj["TrackW"] = m_nTrackW; // 道宽 rootObj["Font"] = m_font.toString(); rootObj["FontColor"] = m_fontColor.name(); return rootObj; } void FormTrackTop::paintEvent(QPaintEvent* event) { QPainter painter(this); QRect rect = this->rect(); //背景透明 painter.fillRect(rect.left(), rect.top(), rect.width(), rect.height(), QColor(0, 0, 0, 0)); //QColor(67, 67, 67, 100) painter.setBrush(Qt::NoBrush); // 确保文字不被填充色遮挡 painter.setFont(m_font); painter.setPen(m_fontColor); // fontColor QColor(220, 220, 220) painter.drawText(rect.left(), rect.top(), rect.width(), rect.height(), Qt::AlignCenter, m_strTrackName); QWidget::paintEvent(event); } void FormTrackTop::dragEnterEvent(QDragEnterEvent* event) { qDebug() << "FormTrackTop dragEnterEvent"; const QMimeData* mimeData = event->mimeData(); // 检查拖拽的数据类型,确定是否接受拖拽 if (event->mimeData()->hasFormat("text/plain")) { event->acceptProposedAction(); //QApplication::setOverrideCursor(Qt::PointingHandCursor); // 设置鼠标为可添加状态 } else { event->ignore(); //QApplication::setOverrideCursor(Qt::ForbiddenCursor); // 设置鼠标为不可添加状态 } } void FormTrackTop::dragMoveEvent(QDragMoveEvent* event) { qDebug() << "FormTrackTop dragMoveEvent"; // 可以在这里更新鼠标的位置,根据位置判断是否可以放置 // ... //dragEnterEvent(event); // 可以使用相同的逻辑 //event->accept(); } void FormTrackTop::dropEvent(QDropEvent* event) { qDebug() << "FormTrackTop dropEvent"; // 处理放置动作,更新UI或数据 if (event->mimeData()->hasFormat("text/plain")) { // 获取拖拽的数据 QString strExtern = event->mimeData()->text(); qDebug() << strExtern; // 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() << "strSlfName:" << strSlfName<< " strWellName:" << strWellName<< " strLineName:" << strLineName << " strType:" << strType; if(m_strWellName == strWellName) { 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); } // 接受拖拽事件 event->setDropAction(Qt::MoveAction); event->accept(); } else { // 如果井名不正确,不接受拖拽事件 event->ignore(); } } else { // 如果数据格式不正确,不接受拖拽事件 event->ignore(); } } else { // 如果数据格式不正确,不接受拖拽事件 event->ignore(); } // 恢复鼠标光标 //QApplication::restoreOverrideCursor(); }