|
|
@@ -39,34 +39,6 @@ TimeWidget::~TimeWidget()
|
|
|
delete ui;
|
|
|
}
|
|
|
|
|
|
-// void TimeWidget::CreateTimeVector(const QVector<int> &types)
|
|
|
-// {
|
|
|
- // ClearVector(m_vecTimePart);
|
|
|
- // for (auto& type : types)
|
|
|
- // {
|
|
|
- // TimePartWidget::emSection emType = static_cast<TimePartWidget::emSection>(type);
|
|
|
- // if (emType >= TimePartWidget::emSection::MAX_SECTION) {
|
|
|
- // continue;
|
|
|
- // }
|
|
|
- // TimePartWidget* pTmp = new TimePartWidget(this);
|
|
|
- // pTmp->Init(emType);
|
|
|
- // if (nullptr != pTmp) {
|
|
|
- // pTmp->SetMaxWidth(width() / types.count());
|
|
|
- // m_vecTimePart.append(pTmp);
|
|
|
- // }
|
|
|
- // }
|
|
|
-// }
|
|
|
-
|
|
|
-// void TimeWidget::ClearVector(QVector<TimePartWidget *> &vec)
|
|
|
-// {
|
|
|
-// for (auto& pWdg : vec) {
|
|
|
-// if (nullptr != pWdg) {
|
|
|
-// delete pWdg;
|
|
|
-// pWdg = nullptr;
|
|
|
-// }
|
|
|
-// }
|
|
|
-// vec.clear();
|
|
|
-// }
|
|
|
|
|
|
void TimeWidget::SetMainWindow(QWidget* pWidget)
|
|
|
{
|
|
|
@@ -102,10 +74,10 @@ QTime TimeWidget::getTime()
|
|
|
* @brief 存在返回时间,否则返回00:00:00
|
|
|
* @return
|
|
|
*/
|
|
|
-QTime TimeWidget::getFormTime() const
|
|
|
-{
|
|
|
- return ui->dateTimeEdit->isHidden() ? QTime(0, 0, 0) : ui->dateTimeEdit->time();
|
|
|
-}
|
|
|
+// QTime TimeWidget::getFormTime() const
|
|
|
+// {
|
|
|
+// return ui->dateTimeEdit->isHidden() ? QTime(0, 0, 0) : ui->dateTimeEdit->time();
|
|
|
+// }
|
|
|
|
|
|
// void TimeWidget::setTime(const QString& t)
|
|
|
// {
|
|
|
@@ -122,6 +94,7 @@ void TimeWidget::setTime(const QTime& t)
|
|
|
ui->lbl_tip->hide();
|
|
|
ui->dateTimeEdit->show();
|
|
|
UpdatePopupTime(ui->dateTimeEdit->dateTime());
|
|
|
+ m_formerDateTime.setTime(t);
|
|
|
}
|
|
|
|
|
|
void TimeWidget::clearTime()
|
|
|
@@ -136,26 +109,26 @@ QString TimeWidget::tipText() const
|
|
|
return ui->lbl_tip->text();
|
|
|
}
|
|
|
/* 设置时间选择区域的大小,不能超过时间编辑栏的大小,这个主要是防止时间栏太宽,影响美观 */
|
|
|
-void TimeWidget::setTimeAreaWidth(int w)
|
|
|
-{
|
|
|
- if(w < 0)
|
|
|
- {
|
|
|
- m_width = 0;
|
|
|
- }
|
|
|
- else if(w > this->width())
|
|
|
- {
|
|
|
- m_width = this->width();
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- m_width = w;
|
|
|
- }
|
|
|
-}
|
|
|
+// void TimeWidget::setTimeAreaWidth(int w)
|
|
|
+// {
|
|
|
+// if(w < 0)
|
|
|
+// {
|
|
|
+// m_width = 0;
|
|
|
+// }
|
|
|
+// else if(w > this->width())
|
|
|
+// {
|
|
|
+// m_width = this->width();
|
|
|
+// }
|
|
|
+// else
|
|
|
+// {
|
|
|
+// m_width = w;
|
|
|
+// }
|
|
|
+// }
|
|
|
|
|
|
void TimeWidget::showTimeEditArea()
|
|
|
{
|
|
|
this->show();
|
|
|
- ShowTimeArea(true);
|
|
|
+ ShowPopupArea(true);
|
|
|
}
|
|
|
|
|
|
/* 以弹窗的模式模态显示 */
|
|
|
@@ -164,7 +137,7 @@ void TimeWidget::execShow()
|
|
|
QEventLoop loop;
|
|
|
connect (this, &TimeWidget::signal_close, &loop, &QEventLoop::quit);
|
|
|
this->show();
|
|
|
- ShowTimeArea(true);
|
|
|
+ ShowPopupArea(true);
|
|
|
loop.exec();
|
|
|
|
|
|
deleteLater();
|
|
|
@@ -199,28 +172,6 @@ void TimeWidget::setIconSize(int w, int h)
|
|
|
// ui->btn_tip->resize(w, h);
|
|
|
}
|
|
|
|
|
|
-/* 设置默认的样式 */
|
|
|
-void TimeWidget::setDefaultStyle()
|
|
|
-{
|
|
|
- /* 判断显示类型,如果是弹窗直接显示编辑区 */
|
|
|
- if(m_type == Dialog)
|
|
|
- {
|
|
|
- ui->btn_tip->hide();
|
|
|
- this->resize(136,36);
|
|
|
-// ShowTimeArea(false);
|
|
|
- /* 设置编辑栏样式 */
|
|
|
- // this->setStyleSheet(R"(
|
|
|
- // TimeWidget
|
|
|
- // {
|
|
|
- // padding-left:15px;
|
|
|
- // background: #FFFFFF;
|
|
|
- // border-radius: 4px;
|
|
|
- // border: 1px solid #E6E9F4;
|
|
|
- // }
|
|
|
- // )");
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
/* 设置编辑栏大小 */
|
|
|
void TimeWidget::setEditLine(int w, int h)
|
|
|
{
|
|
|
@@ -257,29 +208,20 @@ void TimeWidget::setQSS()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * @brief 点击提示信息
|
|
|
- */
|
|
|
-void TimeWidget::onBtnTipClicked()
|
|
|
+
|
|
|
+/* 点击了时间图标 */
|
|
|
+void TimeWidget::do_pBtn_tip_Clicked()
|
|
|
{
|
|
|
- bool isSelected = ui->btn_tip->property("selected").toBool();
|
|
|
- if (!isSelected) {
|
|
|
- // 显示日期
|
|
|
- ui->lbl_tip->hide();
|
|
|
- ui->dateTimeEdit->show();
|
|
|
- ShowTimeArea(true);
|
|
|
- } else {
|
|
|
- if(m_isDisableClear) { return; } // 如果禁止清除时间,就不执行清除操作
|
|
|
- // 清除时间
|
|
|
- ui->dateTimeEdit->setTime(QTime(0, 0, 0));
|
|
|
- UpdateProperty(ui->btn_tip, "selected", false);
|
|
|
- QDateTime dt;
|
|
|
- dt.setTime(QTime(0, 0, 0));
|
|
|
- UpdatePopupTime(dt);
|
|
|
- ShowTimeArea(false);
|
|
|
- ui->dateTimeEdit->hide();
|
|
|
- ui->lbl_tip->show();
|
|
|
+ if(m_pTimePopupWidget == nullptr)
|
|
|
+ {
|
|
|
+ return;
|
|
|
}
|
|
|
+ if(m_pTimePopupWidget->isVisible())
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ /* 展示弹窗 */
|
|
|
+ showTimeEditArea();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -303,27 +245,33 @@ bool TimeWidget::eventFilter(QObject* obj, QEvent* e)
|
|
|
if(m_isBanPopupShow == true)
|
|
|
{
|
|
|
m_isBanPopupShow = false;
|
|
|
+ /* 这里需要再次失去焦点,否则下次点击编辑栏无法弹出Popup */
|
|
|
+ ui->dateTimeEdit->clearFocus();
|
|
|
return QWidget::eventFilter(obj, e);
|
|
|
}
|
|
|
//qInfo() << "dateTimeEdit focusIn";
|
|
|
- ShowTimeArea(true);
|
|
|
+ ShowPopupArea(true);
|
|
|
UpdateProperty(ui->btn_tip, "selected", true);
|
|
|
- emit signal_formerTimer(ui->dateTimeEdit->time());
|
|
|
+ // emit signal_formerTimer(ui->dateTimeEdit->time());
|
|
|
}
|
|
|
return QWidget::eventFilter(obj, e);
|
|
|
- } else if (obj == ui->lbl_tip)
|
|
|
+ }
|
|
|
+ else if (obj == ui->lbl_tip)
|
|
|
{
|
|
|
if (e->type() == QEvent::MouseButtonPress && m_type == EditLine)
|
|
|
{
|
|
|
//qInfo() << "mouseButtonPress";
|
|
|
ui->dateTimeEdit->show();
|
|
|
ui->lbl_tip->hide();
|
|
|
- ShowTimeArea(true);
|
|
|
+ ShowPopupArea(true);
|
|
|
//ui->dateTimeEdit->setFocus();//
|
|
|
return QWidget::eventFilter(obj, e);
|
|
|
}
|
|
|
- } else if (obj == this) {
|
|
|
- if (e->type() == QEvent::Enter) {
|
|
|
+ }
|
|
|
+ else if (obj == this)
|
|
|
+ {
|
|
|
+ if (e->type() == QEvent::Enter)
|
|
|
+ {
|
|
|
UpdateProperty(this, "hover", true);
|
|
|
} else if (e->type() == QEvent::Leave &&
|
|
|
((m_wdgTimeArea.isNull() && !ui->dateTimeEdit->hasFocus()) ||
|
|
|
@@ -342,16 +290,20 @@ bool TimeWidget::eventFilter(QObject* obj, QEvent* e)
|
|
|
QRect rc(gtl.x(), gtl.y(), width(), height()); // 全局位置判断
|
|
|
if (!rc.contains(pMouse->globalPos()))
|
|
|
{
|
|
|
- if(m_wdgTimeArea != nullptr && !m_wdgTimeArea->isHidden())
|
|
|
+ if(m_wdgTimeArea == nullptr)
|
|
|
+ {
|
|
|
+ return QWidget::eventFilter(obj, e);
|
|
|
+ }
|
|
|
+ /* Pupop不可见,直接返回 */
|
|
|
+ if(!m_wdgTimeArea->isVisible())
|
|
|
{
|
|
|
- m_isBanPopupShow = true;
|
|
|
+ return QWidget::eventFilter(obj, e);
|
|
|
}
|
|
|
+ m_isBanPopupShow = true;
|
|
|
|
|
|
- ui->dateTimeEdit->clearFocus();
|
|
|
- ShowTimeArea(false);
|
|
|
+ ShowPopupArea(false);
|
|
|
UpdateProperty(this, "hover", false);
|
|
|
- /* 关闭显示,发送携带时间的信号 */
|
|
|
- emit signal_nowTime(ui->dateTimeEdit->time());
|
|
|
+
|
|
|
if(m_type == Dialog)
|
|
|
{
|
|
|
this->close();
|
|
|
@@ -375,46 +327,11 @@ void TimeWidget::moveEvent(QMoveEvent *event)
|
|
|
// qDebug() << "posX:" << pt.x() << "posY:" << pt.y();
|
|
|
}
|
|
|
}
|
|
|
-/**
|
|
|
- * @brief 时间列表选中事件
|
|
|
- * @param item
|
|
|
- */
|
|
|
-// void TimeWidget::onListItemClicked(QListWidgetItem *item)
|
|
|
-// {
|
|
|
-// if (nullptr == item) return;
|
|
|
-// TimePartWidget* pWdg = reinterpret_cast<TimePartWidget*>(QObject::sender());
|
|
|
-// if (nullptr == pWdg) return;
|
|
|
-
|
|
|
-// QString data(item->text());
|
|
|
-// if (data.isEmpty()) return; // 过滤空白项
|
|
|
-// QDateTime oldDt(ui->dateTimeEdit->dateTime());
|
|
|
-// QTime t(ui->dateTimeEdit->time());
|
|
|
-// switch (pWdg->GetType()) {
|
|
|
-// case TimePartWidget::HOUR: {
|
|
|
-// t.setHMS(data.toInt(), t.minute(), t.second());
|
|
|
-// break;
|
|
|
-// }
|
|
|
-// case TimePartWidget::MINUTE: {
|
|
|
-// t.setHMS(t.hour(), data.toInt(), t.second());
|
|
|
-// break;
|
|
|
-// }
|
|
|
-// case TimePartWidget::SECOND: {
|
|
|
-// t.setHMS(t.hour(), t.minute(), data.toInt());
|
|
|
-// break;
|
|
|
-// }
|
|
|
-// default:
|
|
|
-// break;
|
|
|
-// }
|
|
|
-// if (oldDt.time() != t) {
|
|
|
-// m_bTimeFlag = true;
|
|
|
-// ui->dateTimeEdit->setTime(t);
|
|
|
-// }
|
|
|
-// }
|
|
|
-
|
|
|
|
|
|
-void TimeWidget::do_dateTimeChanged(const QDateTime& dt)
|
|
|
+/* 这个用来实时修改编辑栏的时间 */
|
|
|
+void TimeWidget::do_dateTimeChanged(const QTime& dt)
|
|
|
{
|
|
|
- ui->dateTimeEdit->setTime(dt.time());
|
|
|
+ ui->dateTimeEdit->setTime(dt);
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -435,14 +352,15 @@ void TimeWidget::onDateTimeChanged(const QDateTime& dt)
|
|
|
}
|
|
|
|
|
|
/* 关闭Popup弹窗 */
|
|
|
-void TimeWidget::do_closePopup()
|
|
|
+void TimeWidget::do_closePopup(bool isOk)
|
|
|
{
|
|
|
+ if(isOk == false)
|
|
|
+ {
|
|
|
+ ui->dateTimeEdit->setTime(m_formerDateTime.time());
|
|
|
+ }
|
|
|
m_isBanPopupShow = true;
|
|
|
- ui->dateTimeEdit->clearFocus();
|
|
|
- ShowTimeArea(false);
|
|
|
+ ShowPopupArea(false);
|
|
|
UpdateProperty(this, "hover", false);
|
|
|
- /* 关闭显示,发送携带时间的信号 */
|
|
|
- emit signal_nowTime(ui->dateTimeEdit->time());
|
|
|
if(m_type == Dialog)
|
|
|
{
|
|
|
this->close();
|
|
|
@@ -494,7 +412,7 @@ void TimeWidget::UpdatePopupTime(const QDateTime& dt)
|
|
|
* @brief wdgTimeArea区域是创建出来的,不属于ui区域,他的父类是m_pMainWindow,因此移动的时候需要使用m_pMainWindow的坐标
|
|
|
* @param bShow
|
|
|
*/
|
|
|
-void TimeWidget::ShowTimeArea(bool bShow)
|
|
|
+void TimeWidget::ShowPopupArea(bool bShow)
|
|
|
{
|
|
|
if (m_wdgTimeArea.isNull())
|
|
|
{
|
|
|
@@ -504,19 +422,30 @@ void TimeWidget::ShowTimeArea(bool bShow)
|
|
|
{
|
|
|
if (bShow)
|
|
|
{
|
|
|
- //UpdatePopupTime(ui->dateTimeEdit->dateTime());
|
|
|
// 重新定位再显示
|
|
|
QPoint pt = this->mapTo(m_pMainWindow, QPoint(0, 0));
|
|
|
m_wdgTimeArea->move(QPoint(pt.x() - SHADOW_MARGIN, pt.y() + this->height()));
|
|
|
- /* 设置选择条的大小,如果没有设置m_width,就是用时间编辑栏的宽度 */
|
|
|
- m_wdgTimeArea->resize((m_width == 0 ? width() : m_width) + 2 * SHADOW_MARGIN, TIME_AREA_HEIGHT * 6 + 2 * SHADOW_MARGIN);
|
|
|
- m_wdgTimeArea->setMaximumWidth(width() + 2 * SHADOW_MARGIN);
|
|
|
- m_wdgTimeArea->show();
|
|
|
+
|
|
|
+ /* 设置弹窗Popup的大小,使用默认的固定大小,不允许改变
|
|
|
+ 关于高度:确定取消按钮所占的高度是固定的32,和一节大小一样,所以这里 */
|
|
|
+ int width = 2 * SHADOW_MARGIN + TIME_AREA_WIDTH * m_vecTimeSections.size();
|
|
|
+ int height = TIME_AREA_HEIGHT * 7 + 2 * SHADOW_MARGIN;
|
|
|
+ m_wdgTimeArea->resize(QSize(width, height));
|
|
|
UpdatePopupTime(ui->dateTimeEdit->dateTime());
|
|
|
+ /* 保存现在的时间 */
|
|
|
+ m_formerDateTime = ui->dateTimeEdit->dateTime();
|
|
|
+ m_wdgTimeArea->show();
|
|
|
} else
|
|
|
{
|
|
|
m_wdgTimeArea->hide();
|
|
|
emit signal_close();
|
|
|
+ /* 关闭显示,发送携带时间的信号,判断一下时间是否改变,不改变不发信号 */
|
|
|
+ if(m_formerDateTime.time() != ui->dateTimeEdit->time())
|
|
|
+ {
|
|
|
+ emit signal_timeChanged(m_formerDateTime.time(), ui->dateTimeEdit->time());
|
|
|
+ }
|
|
|
+ /* 让编辑栏失去焦点 */
|
|
|
+ ui->dateTimeEdit->clearFocus();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -584,8 +513,8 @@ void TimeWidget::Init()
|
|
|
}
|
|
|
ui->btn_tip->setProperty("selected", false);
|
|
|
|
|
|
- connect(ui->btn_tip, &QPushButton::clicked, this, &TimeWidget::onBtnTipClicked);
|
|
|
+ connect(ui->btn_tip, &QPushButton::clicked, this, &TimeWidget::do_pBtn_tip_Clicked);
|
|
|
connect(ui->dateTimeEdit, &QDateTimeEdit::dateTimeChanged, this, &TimeWidget::onDateTimeChanged);
|
|
|
|
|
|
- setDefaultStyle();
|
|
|
+ // setDefaultStyle();
|
|
|
}
|