diff --git a/source/dashboardFrame.cpp b/source/dashboardFrame.cpp index 610f831..91c0ed9 100644 --- a/source/dashboardFrame.cpp +++ b/source/dashboardFrame.cpp @@ -596,10 +596,11 @@ void DashboardFrame::onSignal_renameDashboard() showTransparentMask(); QPoint originPoint = ui->navigationPanel->mapToGlobal(QPoint(0, 0)); - int nX = originPoint.x() + (ui->navigationPanel->width() - m_pDashboardNamingDialog->width()) * 0.5; - int nY = originPoint.y() + ui->navigationPanel->height() * 0.5; + int nX = (ui->navigationPanel->width() - m_pDashboardNamingDialog->width()) * 0.5; + int nY = ui->navigationPanel->y() + ui->navigationPanel->height() * 0.5; m_pDashboardNamingDialog->setGeometry(nX, nY, m_pDashboardNamingDialog->width(), m_pDashboardNamingDialog->height()); m_pDashboardNamingDialog->showUsedForRename(); + m_pDashboardNamingDialog->raise(); } void DashboardFrame::onSignal_panelSelectResult(const QString& strType) diff --git a/util/TimeLine/timeLineItem.cpp b/util/TimeLine/timeLineItem.cpp index 684f31f..e5162aa 100644 --- a/util/TimeLine/timeLineItem.cpp +++ b/util/TimeLine/timeLineItem.cpp @@ -14,9 +14,9 @@ public: QColor m_lineColor; TimeUnit m_curTimeUnit; QDateTime m_curTime; - QDateTime m_leftTime; //当前时间左边第一个需要输出展示的时间点 + QDateTime m_rightTime; //当前时间右边第一个需要输出展示的时间点 int m_curTimePos; //当前时间所在的位置(x值),默认在中间(=0) - int m_leftTimePos; + int m_rightTimePos; DisplayState m_curState; int m_scaleSize; //时间刻度大小,单位为像素 int m_scaleFactor; //缩放倍数 @@ -25,18 +25,17 @@ public: QPointF m_mouseDownPoint; //鼠标左键按下的坐标 QDateTime m_mouseDownTime; //鼠标左键是按下坐标对应的时间 }; - TimeLineItemPrivate::TimeLineItemPrivate() { m_lineColor = Qt::white; - m_curTimeUnit = TU_Year; - m_curTime = QDateTime::currentDateTime(); - m_leftTime = m_curTime; + m_curTimeUnit = TU_Minute_1; + m_curTime = QDateTime::currentDateTime();/*QDateTime::fromString("2024-12-10 20:15:00", "yyyy-MM-dd hh:mm:ss");*/ + m_rightTime = m_curTime; m_curTimePos = 0; - m_leftTimePos = 0; + m_rightTimePos = 0; m_curState = RealTime; m_scaleSize = 100; - m_scaleFactor = 1; + m_scaleFactor = (int)m_curTimeUnit; } TimeLineItem::TimeLineItem() : @@ -113,33 +112,33 @@ void TimeLineItem::drawScaleLine(QPainter* p) p->setPen(pen); QRect rect = boundingRect().toRect(); - d_ptr->m_leftTime = calculateLeftTime(); - d_ptr->m_leftTimePos = calculateLeftTimePos(); + d_ptr->m_rightTime = calculateRightTime(); + d_ptr->m_rightTimePos = calculateRightTimePos(); - int x_Left = d_ptr->m_leftTimePos; - int x_Right = x_Left + d_ptr->m_scaleSize; + int x_Right = d_ptr->m_rightTimePos; + int x_Left = x_Right - d_ptr->m_scaleSize; while(1) { - if(x_Left < -rect.width() / 2 - 50) - break; - - p->drawLine(x_Left, d_ptr->m_titleRect.bottom(), x_Left, d_ptr->m_titleRect.bottom() - 5); - drawTimeText(p, x_Left); - x_Left -= d_ptr->m_scaleSize; - } - while(1) - { - if(x_Right > rect.width() / 2 + 50) + if(x_Right > rect.width() / 2 + d_ptr->m_scaleSize * 2) break; p->drawLine(x_Right, d_ptr->m_titleRect.bottom(), x_Right, d_ptr->m_titleRect.bottom() - 5); drawTimeText(p, x_Right); x_Right += d_ptr->m_scaleSize; } + while(1) + { + if(x_Left < -rect.width() / 2 - d_ptr->m_scaleSize * 2) + break; + + p->drawLine(x_Left, d_ptr->m_titleRect.bottom(), x_Left, d_ptr->m_titleRect.bottom() - 5); + drawTimeText(p, x_Left); + x_Left -= d_ptr->m_scaleSize; + } } void TimeLineItem::drawTimeText(QPainter* p, int x) { - QDateTime time = calculateTime(x); + QDateTime time = getTime(x); QString text = ""; QString text1 = ""; switch(d_ptr->m_curTimeUnit) @@ -161,16 +160,16 @@ void TimeLineItem::drawTimeText(QPainter* p, int x) { int day = time.date().day(); if (day == 1) - text1 = time.toString("yyyy-MM"); - text = time.toString("dd"); + text1 = time.toString("yyyy/MM"); + text = time.toString("MM/dd"); break; } case TU_Hour: { int hour = time.time().hour(); if (hour == 0) - text1 = time.toString("MM-dd"); - text = time.toString("hh"); + text1 = time.toString("MM/dd"); + text = time.toString("hh:mm"); break; } case TU_Minute_30: @@ -181,9 +180,9 @@ void TimeLineItem::drawTimeText(QPainter* p, int x) case TU_Minute_3: case TU_Minute_1: { - int minute = time.time().minute(); - if (minute == 0) - text1 = time.toString("MM-dd"); + int hour = time.time().hour(); + if (hour == 0) + text1 = time.toString("MM/dd"); text = time.toString("hh:mm"); break; } @@ -191,9 +190,9 @@ void TimeLineItem::drawTimeText(QPainter* p, int x) case TU_Second_10: case TU_Second_1: { - int second = time.time().second(); - if(second == 0) - text1 = time.toString("MM-dd"); + // int minute = time.time().minute(); + // if(minute == 0) + // text1 = time.toString("MM-dd hh:mm"); text = time.toString("hh:mm:ss"); break; } @@ -202,10 +201,10 @@ void TimeLineItem::drawTimeText(QPainter* p, int x) case TU_MSecond_50: case TU_MSecond_10: { - int msec = time.time().msec(); - if(msec == 0) - text1 = time.toString("MM-dd"); - text = time.toString("mm:ss:z"); + // int minute = time.time().minute(); + // if(minute == 0) + // text1 = time.toString("MM-dd hh:mm"); + text = time.toString("hh:mm:ss.zzz"); break; } default: @@ -230,80 +229,178 @@ void TimeLineItem::drawTimeText(QPainter* p, int x) } } -QDateTime TimeLineItem::calculateLeftTime() +QDateTime TimeLineItem::calculateRightTime() { + //必须保证时间点在整点时刻上,例如20mRange,时刻点为20:00、20:20、20:40、21:00,3mRange,时刻点为20:00,20:03、20:06...20:57、21:00。 + //所以时间区间一定可以被所在但愿整除,比如不能出现7m的时间单元 QDateTime dateTime; - QString strDateTime = d_ptr->m_curTime.toString("yyyyMMddhhmmssz"); + QString strDateTime = d_ptr->m_curTime.toString("yyyyMMddhhmmsszzz");; switch(d_ptr->m_curTimeUnit) { case TU_Year: - strDateTime = strDateTime.left(4) + "01010000000"; + { + strDateTime = d_ptr->m_curTime.addYears(1).toString("yyyyMMddhhmmsszzz"); + strDateTime = strDateTime.left(4) + "0101000000000"; break; + } case TU_Month: - strDateTime = strDateTime.left(6) + "010000000"; + { + strDateTime = d_ptr->m_curTime.addMonths(1).toString("yyyyMMddhhmmsszzz"); + strDateTime = strDateTime.left(6) + "01000000000"; break; + } case TU_Day: - strDateTime = strDateTime.left(8) + "0000000"; + { + strDateTime = d_ptr->m_curTime.addDays(1).toString("yyyyMMddhhmmsszzz"); + strDateTime = strDateTime.left(8) + "000000000"; break; + } case TU_Hour: - strDateTime = strDateTime.left(10) + "00000"; + { + strDateTime = d_ptr->m_curTime.addSecs(60 * 60).toString("yyyyMMddhhmmsszzz"); + strDateTime = strDateTime.left(10) + "0000000"; break; + } case TU_Minute_30: - strDateTime = strDateTime.left(12) + "000"; + { + strDateTime = d_ptr->m_curTime.addSecs(30 * 60).toString("yyyyMMddhhmmsszzz"); + strDateTime = strDateTime.left(10) + "0000000"; break; + } case TU_Minute_20: - strDateTime = strDateTime.left(12) + "000"; + { + QString strBeginTime = strDateTime.left(10) + "0000000"; + dateTime = QDateTime::fromString(strBeginTime, "yyyyMMddhhmmsszzz"); + while(1) + { + dateTime = dateTime.addSecs(20 * 60); + if(dateTime >= d_ptr->m_curTime) + return dateTime; + } break; + } case TU_Minute_15: - strDateTime = strDateTime.left(12) + "000"; + { + QString strBeginTime = strDateTime.left(10) + "0000000"; + dateTime = QDateTime::fromString(strBeginTime, "yyyyMMddhhmmsszzz"); + while(1) + { + dateTime = dateTime.addSecs(15 * 60); + if(dateTime >= d_ptr->m_curTime) + return dateTime; + } break; + break; + } case TU_Minute_10: - strDateTime = strDateTime.left(12) + "000"; + { + QString strBeginTime = strDateTime.left(10) + "0000000"; + dateTime = QDateTime::fromString(strBeginTime, "yyyyMMddhhmmsszzz"); + while(1) + { + dateTime = dateTime.addSecs(10 * 60); + if(dateTime >= d_ptr->m_curTime) + return dateTime; + } break; + } case TU_Minute_5: - strDateTime = strDateTime.left(12) + "000"; + { + QString strBeginTime = strDateTime.left(10) + "0000000"; + dateTime = QDateTime::fromString(strBeginTime, "yyyyMMddhhmmsszzz"); + while(1) + { + dateTime = dateTime.addSecs(5 * 60); + if(dateTime >= d_ptr->m_curTime) + return dateTime; + } break; + } case TU_Minute_3: - strDateTime = strDateTime.left(12) + "000"; + { + QString strBeginTime = strDateTime.left(10) + "0000000"; + dateTime = QDateTime::fromString(strBeginTime, "yyyyMMddhhmmsszzz"); + while(1) + { + dateTime = dateTime.addSecs(3 * 60); + if(dateTime >= d_ptr->m_curTime) + return dateTime; + } break; + } case TU_Minute_1: - strDateTime = strDateTime.left(12) + "000"; + { + strDateTime = d_ptr->m_curTime.addSecs(1 * 60).toString("yyyyMMddhhmmsszzz"); + strDateTime = strDateTime.left(12) + "00000"; break; + } case TU_Second_30: - strDateTime = strDateTime.left(14) + "0"; + { + strDateTime = d_ptr->m_curTime.addSecs(30).toString("yyyyMMddhhmmsszzz"); + strDateTime = strDateTime.left(12) + "00000"; break; + } case TU_Second_10: - strDateTime = strDateTime.left(14) + "0"; + { + QString strBeginTime = strDateTime.left(12) + "00000"; + dateTime = QDateTime::fromString(strBeginTime, "yyyyMMddhhmmsszzz"); + while(1) + { + dateTime = dateTime.addSecs(10); + if(dateTime >= d_ptr->m_curTime) + return dateTime; + } break; + } case TU_Second_1: - strDateTime = strDateTime.left(14) + "0"; + { + strDateTime = d_ptr->m_curTime.addSecs(1).toString("yyyyMMddhhmmsszzz"); + strDateTime = strDateTime.left(14) + "000"; break; + } case TU_MSecond_500: + { + strDateTime = d_ptr->m_curTime.addMSecs(500).toString("yyyyMMddhhmmsszzz"); + strDateTime = strDateTime.left(14) + "000"; break; + } case TU_MSecond_100: + { + strDateTime = d_ptr->m_curTime.addMSecs(100).toString("yyyyMMddhhmmsszzz"); + strDateTime = strDateTime.left(15) + "00"; break; + } case TU_MSecond_50: + { + strDateTime = d_ptr->m_curTime.addMSecs(50).toString("yyyyMMddhhmmsszzz"); + strDateTime = strDateTime.left(15) + "00"; break; + } case TU_MSecond_10: + { + strDateTime = d_ptr->m_curTime.addMSecs(10).toString("yyyyMMddhhmmsszzz"); + strDateTime = strDateTime.left(16) + "0"; break; + } default: break; } - dateTime = QDateTime::fromString(strDateTime, "yyyyMMddhhmmssz"); + dateTime = QDateTime::fromString(strDateTime, "yyyyMMddhhmmsszzz"); return dateTime; } -int TimeLineItem::calculateLeftTimePos() +int TimeLineItem::calculateRightTimePos() { - qint64 timeRange = d_ptr->m_leftTime.msecsTo(d_ptr->m_curTime); + qint64 timeRange = d_ptr->m_rightTime.msecsTo(d_ptr->m_curTime); //右时刻晚于当前时刻,返回负值 + timeRange = -timeRange; qint64 scaleRange = 0; switch(d_ptr->m_curTimeUnit) { case TU_Year: - scaleRange = 365 * 24 * 60 * 60 * (qint64)1000; + scaleRange = d_ptr->m_curTime.date().daysInYear() * 24 * 60 * 60 * (qint64)1000; break; case TU_Month: - scaleRange = 30 * 24 * 60 * 60 * (qint64)1000; + scaleRange = d_ptr->m_curTime.date().daysInMonth() * 24 * 60 * 60 * (qint64)1000; break; case TU_Day: scaleRange = 24 * 60 * 60 * 1000; @@ -357,74 +454,75 @@ int TimeLineItem::calculateLeftTimePos() break; } //qDebug() << timeRange << ", " << scaleRange; - double dRatio = (double)timeRange / scaleRange; - return d_ptr->m_curTimePos + (-d_ptr->m_scaleSize * dRatio); + double dRatio = (double)timeRange / (double)scaleRange; + //qDebug() << "leftTime:" << d_ptr->m_rightTime.toString("yyyy/MM/dd hh:mm:ss"); + return d_ptr->m_curTimePos + (d_ptr->m_scaleSize * dRatio); } -QDateTime TimeLineItem::calculateTime(int x) +QDateTime TimeLineItem::calculateTime(double dUnit) { - if(x == d_ptr->m_curTimePos) - return d_ptr->m_curTime; - QDateTime dateTime; - double dUnit = (double)(x - d_ptr->m_leftTimePos) / (double)d_ptr->m_scaleSize; switch(d_ptr->m_curTimeUnit) { case TU_Year: - dateTime = d_ptr->m_leftTime.addYears((int)dUnit);//先计算年份 - dateTime = dateTime.addMSecs(dateTime.date().daysInYear() * 24 * 60 * 60 * 1000 * (dUnit - (int)dUnit)); //再计算时间 + { + dateTime = d_ptr->m_rightTime.addYears((int)dUnit);//先计算年份 + dateTime = dateTime.addMSecs(dateTime.date().daysInYear() * 24 * 60 * 60 * (qint64)1000 * (dUnit - (int)dUnit)); //再计算时间 break; + } case TU_Month: - dateTime = d_ptr->m_leftTime.addMonths((int)dUnit);//先计算月份 - dateTime = dateTime.addMSecs(dateTime.date().daysInMonth() * 24 * 60 * 60 * 1000 * (dUnit - (int)dUnit)); //再计算时间 + { + dateTime = d_ptr->m_rightTime.addMonths((int)dUnit);//先计算月份 + dateTime = dateTime.addMSecs(dateTime.date().daysInMonth() * 24 * 60 * 60 * (qint64)1000 * (dUnit - (int)dUnit)); //再计算时间 break; + } case TU_Day: - dateTime = d_ptr->m_leftTime.addMSecs(24 * 60 * 60 * 1000 * dUnit); + dateTime = d_ptr->m_rightTime.addMSecs(24 * 60 * 60 * 1000 * dUnit); break; case TU_Hour: - dateTime = d_ptr->m_leftTime.addMSecs(60 * 60 * 1000 * dUnit); + dateTime = d_ptr->m_rightTime.addMSecs(60 * 60 * 1000 * dUnit); break; case TU_Minute_30: - dateTime = d_ptr->m_leftTime.addMSecs(30 * 60 * 1000 * dUnit); + dateTime = d_ptr->m_rightTime.addMSecs(30 * 60 * 1000 * dUnit); break; case TU_Minute_20: - dateTime = d_ptr->m_leftTime.addMSecs(20 * 60 * 1000 * dUnit); + dateTime = d_ptr->m_rightTime.addMSecs(20 * 60 * 1000 * dUnit); break; case TU_Minute_15: - dateTime = d_ptr->m_leftTime.addMSecs(15 * 60 * 1000 * dUnit); + dateTime = d_ptr->m_rightTime.addMSecs(15 * 60 * 1000 * dUnit); break; case TU_Minute_10: - dateTime = d_ptr->m_leftTime.addMSecs(10 * 60 * 1000 * dUnit); + dateTime = d_ptr->m_rightTime.addMSecs(10 * 60 * 1000 * dUnit); break; case TU_Minute_5: - dateTime = d_ptr->m_leftTime.addMSecs(5 * 60 * 1000 * dUnit); + dateTime = d_ptr->m_rightTime.addMSecs(5 * 60 * 1000 * dUnit); break; case TU_Minute_3: - dateTime = d_ptr->m_leftTime.addMSecs(3 * 60 * 1000 * dUnit); + dateTime = d_ptr->m_rightTime.addMSecs(3 * 60 * 1000 * dUnit); break; case TU_Minute_1: - dateTime = d_ptr->m_leftTime.addMSecs(60 * 1000 * dUnit); + dateTime = d_ptr->m_rightTime.addMSecs(60 * 1000 * dUnit); break; case TU_Second_30: - dateTime = d_ptr->m_leftTime.addMSecs(30 * 1000 * dUnit); + dateTime = d_ptr->m_rightTime.addMSecs(30 * 1000 * dUnit); break; case TU_Second_10: - dateTime = d_ptr->m_leftTime.addMSecs(10 * 1000 * dUnit); + dateTime = d_ptr->m_rightTime.addMSecs(10 * 1000 * dUnit); break; case TU_Second_1: - dateTime = d_ptr->m_leftTime.addMSecs(1000 * dUnit); + dateTime = d_ptr->m_rightTime.addMSecs(1000 * dUnit); break; case TU_MSecond_500: - dateTime = d_ptr->m_leftTime.addMSecs(500 * dUnit); + dateTime = d_ptr->m_rightTime.addMSecs(500 * dUnit); break; case TU_MSecond_100: - dateTime = d_ptr->m_leftTime.addMSecs(100 * dUnit); + dateTime = d_ptr->m_rightTime.addMSecs(100 * dUnit); break; case TU_MSecond_50: - dateTime = d_ptr->m_leftTime.addMSecs(50 * dUnit); + dateTime = d_ptr->m_rightTime.addMSecs(50 * dUnit); break; case TU_MSecond_10: - dateTime = d_ptr->m_leftTime.addMSecs(10 * dUnit); + dateTime = d_ptr->m_rightTime.addMSecs(10 * dUnit); break; default: break; @@ -433,6 +531,43 @@ QDateTime TimeLineItem::calculateTime(int x) return dateTime; } +QDateTime TimeLineItem::getTime(int x) +{ + double dUnit = (double)(x - d_ptr->m_rightTimePos) / (double)d_ptr->m_scaleSize; + return calculateTime(dUnit); +} + +qint64 TimeLineItem::getOffsetTimeValue(int x) +{ + double dUnit = (double)(x) / (double)d_ptr->m_scaleSize; + //在极小的时间刻度下做一定的倍数放大,从而让拖拽更平滑 + switch(d_ptr->m_curTimeUnit) + { + case TU_MSecond_100: + dUnit = dUnit * 2; + break; + case TU_MSecond_50: + dUnit = dUnit * 5; + break; + case TU_MSecond_10: + { + if(dUnit < 0) + dUnit = -0.1; + else if(dUnit > 0) + dUnit = 0.1; + //dUnit = dUnit * 10; + } + break; + default: + break; + } + + QDateTime dateTime = calculateTime(dUnit); + //qDebug() << dUnit << " " << dateTime.toString("hh:mm:ss.zzz"); + qint64 value = d_ptr->m_rightTime.msecsTo(dateTime); + return value; +} + void TimeLineItem::setLineColor(QColor color) { d_ptr->m_lineColor = color; @@ -453,7 +588,13 @@ void TimeLineItem::setTime(QDateTime time) if(time > QDateTime::currentDateTime()) return; + //qDebug() << "currTime:" << time.toString("hh:mm:ss.zzz"); d_ptr->m_curTime = time; + prepareGeometryChange(); +} +QDateTime TimeLineItem::time() +{ + return d_ptr->m_curTime; } void TimeLineItem::zoomIn() diff --git a/util/TimeLine/timeLineItem.h b/util/TimeLine/timeLineItem.h index 7ce181b..074480c 100644 --- a/util/TimeLine/timeLineItem.h +++ b/util/TimeLine/timeLineItem.h @@ -1,6 +1,19 @@ #ifndef TIMELINEITEM_H #define TIMELINEITEM_H +/******************************************************************************* +** TimeLine-TimeLineItem +** author 段胜超 +** +** TimeLine的核心组件,用于展现时间刻度线、时间点文字等信息,通过重绘来模拟 +** 鼠标的拖拽、缩放等操作。 +** 时刻分级必须保证可以被所属时刻区间整除,例如分钟内分级,必须可以被60整除,如3分、20分等,不能是7分、8分等 +** 如此才能保证时间刻度会压在“正点时刻”,例如20mRange,时刻点为20:00、20:20、20:40、21:00,3mRange, +** 时刻点为20:00,20:03、20:06...20:57、21:00。 +** 这样可以保证拖动时跨越时间区间时,左右时刻可以无缝的转换,从而完成平滑的拖动效果 +** +******************************************************************************/ + #include "timeLine_globals.h" #include #include @@ -44,7 +57,11 @@ public: void setLineColor(QColor); void setScaleSize(int); void setState(DisplayState); + void setTime(QDateTime); + QDateTime time(); + + qint64 getOffsetTimeValue(int); //获取时间的偏移值(相对当前时间,在鼠标移动拖拽时调用,通过拖拽时同步更改当前时间继而重绘时间轴从而模拟出拖拽效果) void zoomIn(); void zoomOut(); @@ -55,9 +72,10 @@ protected: private: void drawScaleLine(QPainter*); void drawTimeText(QPainter*, int); - QDateTime calculateLeftTime(); //计算当前时间左侧第一个需要输出展示的时间点 - int calculateLeftTimePos(); //计算左侧时间点的坐标位置 - QDateTime calculateTime(int); //计算坐标点所对应的时间 + QDateTime calculateRightTime(); //计算当前时间右侧第一个需要输出展示的时间点 + int calculateRightTimePos(); //计算右侧时间点的坐标位置 + QDateTime calculateTime(double); //计算给定参数值所对应的时间,参数为scalesize的倍数 + QDateTime getTime(int); //获取坐标点(X)所对应的时间 private: TimeLineItemPrivate* d_ptr; diff --git a/util/TimeLine/timeLineWidget.cpp b/util/TimeLine/timeLineWidget.cpp index e2793d1..c13b037 100644 --- a/util/TimeLine/timeLineWidget.cpp +++ b/util/TimeLine/timeLineWidget.cpp @@ -9,11 +9,21 @@ class TimeLineWidgetPrivate { public: + TimeLineWidgetPrivate(); + QGraphicsScene* m_pScene; QColor m_background_color; + bool m_bMousePress; + QPoint m_ptMousePress; + QDateTime m_timeMousePress; + TimeLine::TimeLineItem* m_timeLineItem; }; +TimeLineWidgetPrivate::TimeLineWidgetPrivate() +{ + m_bMousePress = false; +} TimeLineWidget::TimeLineWidget(QWidget *parent) : QGraphicsView(parent) @@ -41,15 +51,42 @@ void TimeLineWidget::resizeEvent(QResizeEvent* e) } void TimeLineWidget::mousePressEvent(QMouseEvent* e) { - + if (Qt::LeftButton == e->button()) + { + d_ptr->m_bMousePress = true; + d_ptr->m_ptMousePress = e->pos(); + d_ptr->m_timeMousePress = d_ptr->m_timeLineItem->time(); + setCursor(Qt::ClosedHandCursor); + } + else + QGraphicsView::mousePressEvent(e); } void TimeLineWidget::mouseMoveEvent(QMouseEvent* e) { + if(d_ptr->m_bMousePress) + { + int offsetX = e->pos().x() - d_ptr->m_ptMousePress.x(); + qint64 offsetValue = d_ptr->m_timeLineItem->getOffsetTimeValue(offsetX); + offsetValue = qAbs(offsetValue); + if(offsetX < 0) + offsetValue = -offsetValue; + d_ptr->m_timeLineItem->setTime(d_ptr->m_timeMousePress.addMSecs(-offsetValue)); + d_ptr->m_ptMousePress = e->pos(); + d_ptr->m_timeMousePress = d_ptr->m_timeLineItem->time(); + } + else + QGraphicsView::mouseMoveEvent(e); } void TimeLineWidget::mouseReleaseEvent(QMouseEvent* e) { - + if (Qt::LeftButton == e->button()) + { + d_ptr->m_bMousePress = false; + setCursor(Qt::ArrowCursor); + } + else + QGraphicsView::mousePressEvent(e); } void TimeLineWidget::wheelEvent(QWheelEvent* e) {