完成TimeLine组件和其它时间组件之间的数据通信和同步

This commit is contained in:
duanshengchao 2024-12-17 16:48:46 +08:00
parent 531d5a74c8
commit 7c2d409091
13 changed files with 201 additions and 88 deletions

View File

@ -82,6 +82,8 @@ public slots:
void onSignal_dashboardTabMoved(int, int); //拖动tab引发了位置变化 void onSignal_dashboardTabMoved(int, int); //拖动tab引发了位置变化
void onSignal_panelSelectResult(const QString&); void onSignal_panelSelectResult(const QString&);
void onSignal_timeRangeChanged(TimeUnit);
void onSignal_viewRealTimeData();
void onSignal_viewHistoricalData(QDateTime); void onSignal_viewHistoricalData(QDateTime);
private: private:

View File

@ -21,6 +21,8 @@ public:
~DateTimeWidget(); ~DateTimeWidget();
void setDateTime(QDateTime); void setDateTime(QDateTime);
void setState(DateTimeWidgetState);
void setRange(TimeUnit);
protected: protected:
bool eventFilter(QObject*, QEvent*); bool eventFilter(QObject*, QEvent*);
@ -38,7 +40,8 @@ public slots:
void onDateTimeSelectResults(QDateTime); void onDateTimeSelectResults(QDateTime);
signals: signals:
void setRange(int); void timeRangeChanged(TimeUnit);
void viewRealTimeData();
void viewHistoricalData(QDateTime); void viewHistoricalData(QDateTime);
void showMask(); void showMask();
@ -46,7 +49,6 @@ signals:
private: private:
void initialize(); void initialize();
void setState(DateTimeWidgetState);
Ui::dateTimeWidget* ui; Ui::dateTimeWidget* ui;
QTimer* m_pTimer_RealTime; QTimer* m_pTimer_RealTime;

View File

@ -1,6 +1,9 @@
#ifndef GLOBAL_H #ifndef GLOBAL_H
#define GLOBAL_H #define GLOBAL_H
#include <QHash>
#include <QString>
enum MessageDialogType enum MessageDialogType
{ {
type_information = 0, type_information = 0,
@ -21,6 +24,31 @@ enum DateTimeWidgetState
historical historical
}; };
enum TimeUnit
{
TU_Year = 1, //yyyy
TU_Month, //yyyy/M/1
TU_Day, //M/d
TU_Hour, //M/d/hh
TU_Minute_30, //hh:mm
TU_Minute_20, //hh:mm
TU_Minute_15, //hh:mm
TU_Minute_10, //hh:mm
TU_Minute_5, //hh:mm
TU_Minute_3, //hh:mm
TU_Minute_1, //hh:mm
TU_Second_30, //hh:mm:ss
TU_Second_10, //hh:mm:ss
TU_Second_1, //hh:mm:ss
TU_MSecond_500, //mm:ss:z
TU_MSecond_100, //mm:ss:z
TU_MSecond_50, //mm:ss:z
TU_MSecond_10 //mm:ss:z
};
extern MessageDialogBtn g_msgDlgBtn; extern MessageDialogBtn g_msgDlgBtn;
extern QHash<int, QString> g_timeUnit;
void initializeGlobalVariable();
#endif #endif

View File

@ -44,12 +44,16 @@ DashboardFrame::DashboardFrame(const QString& strName, dashboardFrame::frameType
ui->btnAlarmNoticatio->setVisible(false); ui->btnAlarmNoticatio->setVisible(false);
} }
initializeGlobalVariable();
m_pDateTimeWidget = new DateTimeWidget(this); m_pDateTimeWidget = new DateTimeWidget(this);
m_pDateTimeWidget->setObjectName("dateTimeWidget"); m_pDateTimeWidget->setObjectName("dateTimeWidget");
ui->layout_dateTime->addWidget(m_pDateTimeWidget); ui->layout_dateTime->addWidget(m_pDateTimeWidget);
connect(m_pDateTimeWidget, SIGNAL(showMask()), this, SLOT(onSignal_showMask())); connect(m_pDateTimeWidget, SIGNAL(showMask()), this, SLOT(onSignal_showMask()));
connect(m_pDateTimeWidget, SIGNAL(hideMask()), this, SLOT(onSignal_hideMask())); connect(m_pDateTimeWidget, SIGNAL(hideMask()), this, SLOT(onSignal_hideMask()));
connect(m_pDateTimeWidget, SIGNAL(viewRealTimeData()), this, SLOT(onSignal_viewRealTimeData()));
connect(m_pDateTimeWidget, SIGNAL(viewHistoricalData(QDateTime)), this, SLOT(onSignal_viewHistoricalData(QDateTime))); connect(m_pDateTimeWidget, SIGNAL(viewHistoricalData(QDateTime)), this, SLOT(onSignal_viewHistoricalData(QDateTime)));
connect(m_pDateTimeWidget, SIGNAL(timeRangeChanged(TimeUnit)), this, SLOT(onSignal_timeRangeChanged(TimeUnit)));
m_pDashboardTabBar = new CustomTabBar(this); m_pDashboardTabBar = new CustomTabBar(this);
m_pDashboardTabBar->setFrame(this); m_pDashboardTabBar->setFrame(this);
@ -62,6 +66,9 @@ DashboardFrame::DashboardFrame(const QString& strName, dashboardFrame::frameType
m_pTimeLineWidget->setTimelineColor(QColor(250, 250, 250)); m_pTimeLineWidget->setTimelineColor(QColor(250, 250, 250));
m_pTimeLineWidget->setTimeScaleSize(200); m_pTimeLineWidget->setTimeScaleSize(200);
ui->layout_timeLine->addWidget(m_pTimeLineWidget); ui->layout_timeLine->addWidget(m_pTimeLineWidget);
connect(m_pTimeLineWidget, SIGNAL(viewHistoricalData(QDateTime)), this, SLOT(onSignal_viewHistoricalData(QDateTime)));
connect(m_pTimeLineWidget, SIGNAL(timeScaleUnitChanged(TimeUnit)), this, SLOT(onSignal_timeRangeChanged(TimeUnit)));
m_pTimeLineWidget->syncTimeUnit();
connect(ui->btnAddDashboard, SIGNAL(clicked()), this, SLOT(onBtnClicked_addDashboard())); connect(ui->btnAddDashboard, SIGNAL(clicked()), this, SLOT(onBtnClicked_addDashboard()));
connect(ui->btnAddPanel, SIGNAL(clicked()), this, SLOT(onBtnClicked_addDataPanel())); connect(ui->btnAddPanel, SIGNAL(clicked()), this, SLOT(onBtnClicked_addDataPanel()));
@ -76,6 +83,9 @@ DashboardFrame::DashboardFrame(const QString& strName, dashboardFrame::frameType
DashboardFrame::~DashboardFrame() DashboardFrame::~DashboardFrame()
{ {
delete ui; delete ui;
if(m_pTimer_RealTime->isActive())
m_pTimer_RealTime->stop();
} }
bool DashboardFrame::eventFilter(QObject* obj, QEvent* event) bool DashboardFrame::eventFilter(QObject* obj, QEvent* event)
@ -609,7 +619,7 @@ void DashboardFrame::onSignal_renameDashboard()
} }
showTransparentMask(); showTransparentMask();
QPoint originPoint = ui->navigationPanel->mapToGlobal(QPoint(0, 0)); //QPoint originPoint = ui->navigationPanel->mapToGlobal(QPoint(0, 0));
int nX = (ui->navigationPanel->width() - m_pDashboardNamingDialog->width()) * 0.5; int nX = (ui->navigationPanel->width() - m_pDashboardNamingDialog->width()) * 0.5;
int nY = ui->navigationPanel->y() + ui->navigationPanel->height() * 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->setGeometry(nX, nY, m_pDashboardNamingDialog->width(), m_pDashboardNamingDialog->height());
@ -624,18 +634,44 @@ void DashboardFrame::onSignal_panelSelectResult(const QString& strType)
m_curActiveDashboard->addPanel(strType); m_curActiveDashboard->addPanel(strType);
} }
void DashboardFrame::onSignal_timeRangeChanged(TimeUnit unit)
{
QObject* pObject = QObject::sender();
if(pObject->objectName() == "dateTimeWidget")
{
m_pTimeLineWidget->setTimeScaleUnit(unit);
}
else if(pObject->objectName() == "timeLineWidget")
{
m_pDateTimeWidget->setRange(unit);
}
}
void DashboardFrame::onSignal_viewRealTimeData()
{
if(!m_pTimer_RealTime->isActive())
m_pTimer_RealTime->start(1000);
m_pTimeLineWidget->setDisplayState(realTime);
}
void DashboardFrame::onSignal_viewHistoricalData(QDateTime dateTime) void DashboardFrame::onSignal_viewHistoricalData(QDateTime dateTime)
{ {
//qDebug() << "viewHistoricalData: " + dateTime.date().toString("yyyy/MM/dd"); //qDebug() << "viewHistoricalData: " + dateTime.date().toString("yyyy/MM/dd");
hideTransparentMask(); hideTransparentMask();
if(m_pTimer_RealTime->isActive())
m_pTimer_RealTime->stop();
QObject* pObject = QObject::sender(); QObject* pObject = QObject::sender();
if(pObject->objectName() == "dateTimeWidget") if(pObject->objectName() == "dateTimeWidget")
{ {
m_pTimeLineWidget->setDateTime(dateTime);
m_pTimeLineWidget->setDisplayState(historical);
} }
else if(pObject->objectName() == "timeLineWidget") else if(pObject->objectName() == "timeLineWidget")
{ {
m_pDateTimeWidget->setDateTime(dateTime);
m_pDateTimeWidget->setState(historical);
} }
} }

View File

@ -32,6 +32,10 @@ void DateTimeSelectionPanel::show_()
QDate today = QDate::currentDate(); QDate today = QDate::currentDate();
m_pCalendar->setSelectedDate(today); m_pCalendar->setSelectedDate(today);
m_pCalendar->showToday(); m_pCalendar->showToday();
ui->btn_year->setText(QString::number(m_pCalendar->selectedDate().year()));
ui->btn_month->setText(QString::number(m_pCalendar->selectedDate().month()));
show(); show();
} }

View File

@ -58,31 +58,31 @@ void DateTimeWidget::initialize()
connect(ui->btnDate, SIGNAL(clicked()), this, SLOT(onBtnClicked_date())); connect(ui->btnDate, SIGNAL(clicked()), this, SLOT(onBtnClicked_date()));
connect(ui->btnHistoricalData, SIGNAL(clicked()), this, SLOT(onBtnClicked_historicalData())); connect(ui->btnHistoricalData, SIGNAL(clicked()), this, SLOT(onBtnClicked_historicalData()));
int nMinUnit = 60; //以秒为最小单位 //int nMinUnit = 60 * 1000; //以毫秒为最小单位
ui->btnRange_1m->setProperty("range", 1*nMinUnit); //ui->btnRange_1m->setProperty("range", 1*nMinUnit);
ui->btnRange_1m->setProperty("name", "1m"); ui->btnRange_1m->setProperty("timeUnit", TU_Minute_1);
connect(ui->btnRange_1m, SIGNAL(clicked()), this, SLOT(onBtnClicked_range())); connect(ui->btnRange_1m, SIGNAL(clicked()), this, SLOT(onBtnClicked_range()));
ui->btnRange_3m->setProperty("range", 3*nMinUnit); //ui->btnRange_3m->setProperty("range", 3*nMinUnit);
ui->btnRange_3m->setProperty("name", "3m"); ui->btnRange_3m->setProperty("timeUnit", TU_Minute_3);
connect(ui->btnRange_3m, SIGNAL(clicked()), this, SLOT(onBtnClicked_range())); connect(ui->btnRange_3m, SIGNAL(clicked()), this, SLOT(onBtnClicked_range()));
ui->btnRange_5m->setProperty("range", 5*nMinUnit); //ui->btnRange_5m->setProperty("range", 5*nMinUnit);
ui->btnRange_5m->setProperty("name", "5m"); ui->btnRange_5m->setProperty("timeUnit", TU_Minute_5);
connect(ui->btnRange_5m, SIGNAL(clicked()), this, SLOT(onBtnClicked_range())); connect(ui->btnRange_5m, SIGNAL(clicked()), this, SLOT(onBtnClicked_range()));
ui->btnRange_10m->setProperty("range", 10*nMinUnit); //ui->btnRange_10m->setProperty("range", 10*nMinUnit);
ui->btnRange_10m->setProperty("name", "10m"); ui->btnRange_10m->setProperty("timeUnit", TU_Minute_10);
connect(ui->btnRange_10m, SIGNAL(clicked()), this, SLOT(onBtnClicked_range())); connect(ui->btnRange_10m, SIGNAL(clicked()), this, SLOT(onBtnClicked_range()));
ui->btnRange_30m->setProperty("range", 30*nMinUnit); //ui->btnRange_30m->setProperty("range", 30*nMinUnit);
ui->btnRange_30m->setProperty("name", "30m"); ui->btnRange_30m->setProperty("timeUnit", TU_Minute_30);
connect(ui->btnRange_30m, SIGNAL(clicked()), this, SLOT(onBtnClicked_range())); connect(ui->btnRange_30m, SIGNAL(clicked()), this, SLOT(onBtnClicked_range()));
ui->btnRange_1h->setProperty("range", 1*60*nMinUnit); //ui->btnRange_1h->setProperty("range", 1*60*nMinUnit);
ui->btnRange_1h->setProperty("name", "1h"); ui->btnRange_1h->setProperty("timeUnit", TU_Hour);
connect(ui->btnRange_1h, SIGNAL(clicked()), this, SLOT(onBtnClicked_range())); connect(ui->btnRange_1h, SIGNAL(clicked()), this, SLOT(onBtnClicked_range()));
ui->btnRange_1d->setProperty("range", 24*60*nMinUnit); //ui->btnRange_1d->setProperty("range", 24*60*nMinUnit);
ui->btnRange_1d->setProperty("name", "1d"); ui->btnRange_1d->setProperty("timeUnit", TU_Day);
connect(ui->btnRange_1d, SIGNAL(clicked()), this, SLOT(onBtnClicked_range())); connect(ui->btnRange_1d, SIGNAL(clicked()), this, SLOT(onBtnClicked_range()));
ui->btnRange_7d->setProperty("range", 7*24*60*nMinUnit); //ui->btnRange_30d->setProperty("range", 30*24*60*nMinUnit);
ui->btnRange_7d->setProperty("name", "7d"); ui->btnRange_30d->setProperty("timeUnit", TU_Month);
connect(ui->btnRange_7d, SIGNAL(clicked()), this, SLOT(onBtnClicked_range())); connect(ui->btnRange_30d, SIGNAL(clicked()), this, SLOT(onBtnClicked_range()));
connect(ui->btnRangeSelect1, SIGNAL(clicked()), this, SLOT(onBtnClicked_rangeSelect())); connect(ui->btnRangeSelect1, SIGNAL(clicked()), this, SLOT(onBtnClicked_rangeSelect()));
connect(ui->btnRangeSelect2, SIGNAL(clicked()), this, SLOT(onBtnClicked_rangeSelect())); connect(ui->btnRangeSelect2, SIGNAL(clicked()), this, SLOT(onBtnClicked_rangeSelect()));
@ -102,6 +102,19 @@ void DateTimeWidget::initialize()
connect(m_pSelectionPanel, SIGNAL(selectResults(QDateTime)), this, SLOT(onDateTimeSelectResults(QDateTime))); connect(m_pSelectionPanel, SIGNAL(selectResults(QDateTime)), this, SLOT(onDateTimeSelectResults(QDateTime)));
} }
void DateTimeWidget::setRange(TimeUnit unit)
{
QString strName = g_timeUnit.value(unit);
ui->btnRangeSelect1->setText(strName);
QChar c = strName.back();
if(c == 'm')
ui->btnRangeSelect2->setText("Minute Chart Range");
else if(c == 'h')
ui->btnRangeSelect2->setText("Hour Chart Range");
else if(c == 'd')
ui->btnRangeSelect2->setText("Day Chart Range");
}
void DateTimeWidget::setState(DateTimeWidgetState state) void DateTimeWidget::setState(DateTimeWidgetState state)
{ {
if(state == realTime) if(state == realTime)
@ -121,7 +134,7 @@ void DateTimeWidget::setDateTime(QDateTime dateTime)
{ {
QString strTime = dateTime.time().toString("HH:mm:ss"); QString strTime = dateTime.time().toString("HH:mm:ss");
ui->label_time->setText(strTime); ui->label_time->setText(strTime);
if(dateTime.time() == QTime(0,0,0)) //if(dateTime.time() == QTime(0,0,0))
{ {
QString strDate = dateTime.date().toString("yyyy/MM/dd"); QString strDate = dateTime.date().toString("yyyy/MM/dd");
ui->btnDate->setText(strDate); ui->btnDate->setText(strDate);
@ -131,6 +144,7 @@ void DateTimeWidget::setDateTime(QDateTime dateTime)
void DateTimeWidget::onBtnClicked_historicalData() void DateTimeWidget::onBtnClicked_historicalData()
{ {
setState(realTime); setState(realTime);
emit viewRealTimeData();
} }
void DateTimeWidget::onBtnClicked_realTimeData() void DateTimeWidget::onBtnClicked_realTimeData()
{ {
@ -139,7 +153,6 @@ void DateTimeWidget::onBtnClicked_realTimeData()
void DateTimeWidget::onBtnClicked_date() void DateTimeWidget::onBtnClicked_date()
{ {
setState(historical);
emit showMask(); emit showMask();
QPoint originPoint = ui->btnDate->mapToGlobal(QPoint(0, 0)); QPoint originPoint = ui->btnDate->mapToGlobal(QPoint(0, 0));
@ -161,18 +174,9 @@ void DateTimeWidget::onBtnClicked_range()
if(!pBtn) if(!pBtn)
return; return;
int nRange = pBtn->property("range").toInt(); TimeUnit unit = (TimeUnit)pBtn->property("timeUnit").toInt();
emit setRange(nRange); setRange(unit);
emit timeRangeChanged(unit);
QString strName = pBtn->property("name").toString();
ui->btnRangeSelect1->setText(strName);
QChar c = strName.back();
if(c == 'm')
ui->btnRangeSelect2->setText("Minute Chart Range");
else if(c == 'h')
ui->btnRangeSelect2->setText("Hour Chart Range");
else if(c == 'd')
ui->btnRangeSelect2->setText("Day Chart Range");
ui->stacked_range->setCurrentIndex(0); ui->stacked_range->setCurrentIndex(0);
if(m_pTimer_Range->isActive()) if(m_pTimer_Range->isActive())
@ -197,14 +201,13 @@ void DateTimeWidget::onTimeout_realTime()
void DateTimeWidget::onDateTimeSelectResults(QDateTime dateTime) void DateTimeWidget::onDateTimeSelectResults(QDateTime dateTime)
{ {
if(dateTime.date() == QDate::currentDate()) if(dateTime.date() == QDate::currentDate() && ui->stacked_time->currentIndex() == 0)
{ {
setState(realTime);
emit hideMask(); emit hideMask();
return;
} }
else
{ setState(historical);
dateTime.setTime(QTime::currentTime()); dateTime.setTime(QTime::currentTime());
emit viewHistoricalData(dateTime); emit viewHistoricalData(dateTime);
}
} }

View File

@ -1,3 +1,27 @@
#include "global.h" #include "global.h"
MessageDialogBtn g_msgDlgBtn = btn_Null; MessageDialogBtn g_msgDlgBtn = btn_Null;
QHash<int, QString> g_timeUnit;
void initializeGlobalVariable()
{
g_timeUnit.insert(TU_Year, QString::fromWCharArray(L"365d"));
g_timeUnit.insert(TU_Month, QString::fromWCharArray(L"30d"));
g_timeUnit.insert(TU_Day, QString::fromWCharArray(L"1d"));
g_timeUnit.insert(TU_Hour, QString::fromWCharArray(L"1h"));
g_timeUnit.insert(TU_Minute_30, QString::fromWCharArray(L"30m"));
g_timeUnit.insert(TU_Minute_20, QString::fromWCharArray(L"20m"));
g_timeUnit.insert(TU_Minute_15, QString::fromWCharArray(L"15m"));
g_timeUnit.insert(TU_Minute_10, QString::fromWCharArray(L"10m"));
g_timeUnit.insert(TU_Minute_5, QString::fromWCharArray(L"5m"));
g_timeUnit.insert(TU_Minute_3, QString::fromWCharArray(L"3m"));
g_timeUnit.insert(TU_Minute_1, QString::fromWCharArray(L"1m"));
g_timeUnit.insert(TU_Second_30, QString::fromWCharArray(L"30s"));
g_timeUnit.insert(TU_Second_10, QString::fromWCharArray(L"10s"));
g_timeUnit.insert(TU_Second_1, QString::fromWCharArray(L"1s"));
g_timeUnit.insert(TU_MSecond_500, QString::fromWCharArray(L"500ms"));
g_timeUnit.insert(TU_MSecond_100, QString::fromWCharArray(L"100ms"));
g_timeUnit.insert(TU_MSecond_50, QString::fromWCharArray(L"50ms"));
g_timeUnit.insert(TU_MSecond_10, QString::fromWCharArray(L"10ms"));
}

View File

@ -106,7 +106,7 @@ color:rgb(250,250,250);</string>
<string>11:39:52</string> <string>11:39:52</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignmentFlag::AlignCenter</set> <set>Qt::AlignCenter</set>
</property> </property>
</widget> </widget>
</item> </item>
@ -300,7 +300,7 @@ background-color:transparent;
<item> <item>
<spacer name="horizontalSpacer"> <spacer name="horizontalSpacer">
<property name="orientation"> <property name="orientation">
<enum>Qt::Orientation::Horizontal</enum> <enum>Qt::Horizontal</enum>
</property> </property>
<property name="sizeHint" stdset="0"> <property name="sizeHint" stdset="0">
<size> <size>
@ -314,13 +314,13 @@ background-color:transparent;
<widget class="QPushButton" name="btnRangeSelect1"> <widget class="QPushButton" name="btnRangeSelect1">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>65</width> <width>100</width>
<height>0</height> <height>0</height>
</size> </size>
</property> </property>
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
<width>65</width> <width>100</width>
<height>16777215</height> <height>16777215</height>
</size> </size>
</property> </property>
@ -342,7 +342,7 @@ QPushButton:pressed
}</string> }</string>
</property> </property>
<property name="text"> <property name="text">
<string>30m</string> <string>500ms</string>
</property> </property>
<property name="flat"> <property name="flat">
<bool>true</bool> <bool>true</bool>
@ -352,7 +352,7 @@ QPushButton:pressed
<item> <item>
<spacer name="horizontalSpacer_2"> <spacer name="horizontalSpacer_2">
<property name="orientation"> <property name="orientation">
<enum>Qt::Orientation::Horizontal</enum> <enum>Qt::Horizontal</enum>
</property> </property>
<property name="sizeHint" stdset="0"> <property name="sizeHint" stdset="0">
<size> <size>
@ -654,7 +654,7 @@ background-color:transparent;
</widget> </widget>
</item> </item>
<item row="1" column="3"> <item row="1" column="3">
<widget class="QPushButton" name="btnRange_7d"> <widget class="QPushButton" name="btnRange_30d">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>41</width> <width>41</width>
@ -684,7 +684,7 @@ background-color:transparent;
}</string> }</string>
</property> </property>
<property name="text"> <property name="text">
<string>7d</string> <string>30d</string>
</property> </property>
</widget> </widget>
</item> </item>

View File

@ -17,13 +17,14 @@ public:
QDateTime m_rightTime; //当前时间右边第一个需要输出展示的时间点 QDateTime m_rightTime; //当前时间右边第一个需要输出展示的时间点
int m_curTimePos; //当前时间所在的位置(x值),默认在中间(=0) int m_curTimePos; //当前时间所在的位置(x值),默认在中间(=0)
int m_rightTimePos; int m_rightTimePos;
DisplayState m_curState;
int m_scaleSize; //时间刻度大小,单位为像素 int m_scaleSize; //时间刻度大小,单位为像素
int m_scaleFactor; //缩放倍数 int m_scaleFactor; //缩放倍数
bool m_leftMouseIsDown; //鼠标左键是否按下 bool m_leftMouseIsDown; //鼠标左键是否按下
QPointF m_mouseDownPoint; //鼠标左键按下的坐标 QPointF m_mouseDownPoint; //鼠标左键按下的坐标
QDateTime m_mouseDownTime; //鼠标左键是按下坐标对应的时间 QDateTime m_mouseDownTime; //鼠标左键是按下坐标对应的时间
DateTimeWidgetState m_curState;
}; };
TimeLineItemPrivate::TimeLineItemPrivate() TimeLineItemPrivate::TimeLineItemPrivate()
{ {
@ -33,7 +34,7 @@ TimeLineItemPrivate::TimeLineItemPrivate()
m_rightTime = m_curTime; m_rightTime = m_curTime;
m_curTimePos = 0; m_curTimePos = 0;
m_rightTimePos = 0; m_rightTimePos = 0;
m_curState = RealTime; m_curState = realTime;
m_scaleSize = 100; m_scaleSize = 100;
m_scaleFactor = (int)m_curTimeUnit; m_scaleFactor = (int)m_curTimeUnit;
} }
@ -70,7 +71,7 @@ void TimeLineItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* opti
QFont font = painter->font(); QFont font = painter->font();
QString strCurState = ""; QString strCurState = "";
//绘制title包含当前日期显示、状态显示不同状态对应不同颜色 //绘制title包含当前日期显示、状态显示不同状态对应不同颜色
if(d_ptr->m_curState == RealTime) if(d_ptr->m_curState == realTime)
{ {
brush.setColor(QColor(39, 102, 59)); brush.setColor(QColor(39, 102, 59));
brush.setStyle(Qt::SolidPattern); brush.setStyle(Qt::SolidPattern);
@ -578,7 +579,7 @@ void TimeLineItem::setScaleSize(int size)
d_ptr->m_scaleSize = size; d_ptr->m_scaleSize = size;
} }
void TimeLineItem::setState(DisplayState state) void TimeLineItem::setState(DateTimeWidgetState state)
{ {
d_ptr->m_curState = state; d_ptr->m_curState = state;
} }
@ -618,4 +619,14 @@ void TimeLineItem::zoomOut()
//qDebug() << d_ptr->m_curTimeUnit; //qDebug() << d_ptr->m_curTimeUnit;
} }
void TimeLineItem::setTimeUnit(TimeUnit unit)
{
d_ptr->m_curTimeUnit = unit;
}
TimeUnit TimeLineItem::timeUnit()
{
return d_ptr->m_curTimeUnit;
}
} // namespace TimeLine } // namespace TimeLine

View File

@ -13,36 +13,13 @@
** **
** **
******************************************************************************/ ******************************************************************************/
#include "global.h"
#include "timeLine_globals.h"
#include <QGraphicsObject> #include <QGraphicsObject>
#include <QDateTime> #include <QDateTime>
namespace TimeLine namespace TimeLine
{ {
enum TimeUnit
{
TU_Year = 1, //yyyy
TU_Month, //yyyy/M/1
TU_Day, //M/d
TU_Hour, //M/d/hh
TU_Minute_30, //hh:mm
TU_Minute_20, //hh:mm
TU_Minute_15, //hh:mm
TU_Minute_10, //hh:mm
TU_Minute_5, //hh:mm
TU_Minute_3, //hh:mm
TU_Minute_1, //hh:mm
TU_Second_30, //hh:mm:ss
TU_Second_10, //hh:mm:ss
TU_Second_1, //hh:mm:ss
TU_MSecond_500, //mm:ss:z
TU_MSecond_100, //mm:ss:z
TU_MSecond_50, //mm:ss:z
TU_MSecond_10 //mm:ss:z
};
class TimeLineItemPrivate; class TimeLineItemPrivate;
class TimeLineItem : public QGraphicsObject class TimeLineItem : public QGraphicsObject
{ {
@ -56,7 +33,7 @@ public:
void updateBoundingRect(const QRect&); void updateBoundingRect(const QRect&);
void setLineColor(QColor); void setLineColor(QColor);
void setScaleSize(int); void setScaleSize(int);
void setState(DisplayState); void setState(DateTimeWidgetState);
void setTime(QDateTime); void setTime(QDateTime);
QDateTime time(); QDateTime time();
@ -65,6 +42,8 @@ public:
void zoomIn(); void zoomIn();
void zoomOut(); void zoomOut();
void setTimeUnit(TimeUnit);
TimeUnit timeUnit();
protected: protected:
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*); virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*);

View File

@ -71,9 +71,12 @@ void TimeLineWidget::mouseMoveEvent(QMouseEvent* e)
if(offsetX < 0) if(offsetX < 0)
offsetValue = -offsetValue; offsetValue = -offsetValue;
d_ptr->m_timeLineItem->setTime(d_ptr->m_timeMousePress.addMSecs(-offsetValue)); QDateTime dateTime = d_ptr->m_timeMousePress.addMSecs(-offsetValue);
d_ptr->m_timeLineItem->setTime(dateTime);
d_ptr->m_ptMousePress = e->pos(); d_ptr->m_ptMousePress = e->pos();
d_ptr->m_timeMousePress = d_ptr->m_timeLineItem->time(); d_ptr->m_timeMousePress = d_ptr->m_timeLineItem->time();
emit viewHistoricalData(dateTime);
} }
else else
QGraphicsView::mouseMoveEvent(e); QGraphicsView::mouseMoveEvent(e);
@ -94,6 +97,8 @@ void TimeLineWidget::wheelEvent(QWheelEvent* e)
d_ptr->m_timeLineItem->zoomIn(); d_ptr->m_timeLineItem->zoomIn();
else else
d_ptr->m_timeLineItem->zoomOut(); d_ptr->m_timeLineItem->zoomOut();
emit timeScaleUnitChanged(d_ptr->m_timeLineItem->timeUnit());
} }
void TimeLineWidget::updateAll() void TimeLineWidget::updateAll()
@ -117,8 +122,23 @@ void TimeLineWidget::setTimeScaleSize(int size)
d_ptr->m_timeLineItem->setScaleSize(size); d_ptr->m_timeLineItem->setScaleSize(size);
} }
void TimeLineWidget::setTimeScaleUnit(TimeUnit unit)
{
d_ptr->m_timeLineItem->setTimeUnit(unit);
}
void TimeLineWidget::setDateTime(QDateTime dateTime) void TimeLineWidget::setDateTime(QDateTime dateTime)
{ {
d_ptr->m_timeLineItem->setTime(dateTime); d_ptr->m_timeLineItem->setTime(dateTime);
} }
void TimeLineWidget::setDisplayState(DateTimeWidgetState state)
{
d_ptr->m_timeLineItem->setState(state);
}
void TimeLineWidget::syncTimeUnit()
{
emit timeScaleUnitChanged(d_ptr->m_timeLineItem->timeUnit());
}

View File

@ -1,6 +1,7 @@
#ifndef TIMELINEWIDGET_H #ifndef TIMELINEWIDGET_H
#define TIMELINEWIDGET_H #define TIMELINEWIDGET_H
#include "global.h"
#include <QGraphicsView> #include <QGraphicsView>
class TimeLineWidgetPrivate; class TimeLineWidgetPrivate;
@ -16,7 +17,16 @@ public:
void setBackground(QColor); void setBackground(QColor);
void setTimelineColor(QColor); void setTimelineColor(QColor);
void setTimeScaleSize(int); //设置时间刻度大小(像素) void setTimeScaleSize(int); //设置时间刻度大小(像素)
void setTimeScaleUnit(TimeUnit); //设置时间刻度单位
void setDateTime(QDateTime); void setDateTime(QDateTime);
void setDisplayState(DateTimeWidgetState);
void syncTimeUnit();
signals:
void viewHistoricalData(QDateTime);
void timeScaleUnitChanged(TimeUnit);
protected: protected:
virtual void resizeEvent(QResizeEvent*) override; virtual void resizeEvent(QResizeEvent*) override;

View File

@ -4,12 +4,6 @@
namespace TimeLine namespace TimeLine
{ {
enum DisplayState
{
RealTime,
Historical
};
} }
#endif #endif