#include "date_time_widget.h"
#include "ui_date_time_widget.h"
#include "Widgets/DateTimeEdit/button_day.h"
#include <QDateTime>
#include <QDate>
#include <QMenu>
DateTimeWidget::DateTimeWidget(QWidget* parent) : QWidget(parent), ui(new Ui::DateTimeWidget),
m_rangeSelect(false)
{
ui->setupUi(this);
initPage();
}
DateTimeWidget::~DateTimeWidget()
{
delete ui;
}
void DateTimeWidget::setDate(const QDate &date1)
{
m_date1 = date1;
}
void DateTimeWidget::initPage()
{
#if SUPPORT_C11
#else
DateTime::MapInsert::initMonth();
#endif
setWindowFlags(Qt::FramelessWindowHint | Qt::SubWindow);
auto pMenu = new QMenu(this);
pMenu->setProperty("type", "month");
ui->btnMonth->setMenu(pMenu);
for (auto itor = DateTime::month().begin(); itor != DateTime::month().end(); ++itor)
{
auto pMonth = pMenu->addAction(itor.value(), this, [this]
{
auto const pAction = qobject_cast<QAction*>(sender());
if (Q_NULLPTR == pAction)
{
return;
}
ui->btnMonth->setText(pAction->text());
ui->btnMonth->setData(DateTime::month().key(pAction->text()));
// updateDays(ui->dateEdit->date().day());
});
pMonth->setData(itor.key());
}
// day widget
for (int index = 0; index < 42; ++index)
{
auto btn = new ButtonDay(index + 1);
btn->setFixedSize(QSize(30, 30));
ui->gridLayout->addWidget(btn, index / 7, index % 7);
btn->setType(((index % 7 == 0) || (index % 7 == 6)) ? DateTime::WEEKEND : DateTime::WORKDAY);
btn->setRole(DateTime::CURRENT_MONTH);
m_dayList.append(QVariant::fromValue(static_cast<void*>(btn)));
connect(btn, &QPushButton::clicked, this, [this]
{
for (const auto& pbt : m_dayList)
{
auto pb = static_cast<ButtonDay*>(pbt.value<void*>());
if (Q_NULLPTR == pb)
{
continue;
}
// if (pb->role().testFlag(DateTime::SELECT_DAY))
// {
// pb->setRole(DateTime::CURRENT_MONTH);
// break;
// }
}
auto const btn = qobject_cast<ButtonDay*>(sender());
btn->setRole(DateTime::SELECT_DAY);
if (btn->month().testFlag(DateTime::PREV_MONTH_DAY))
{
if (ui->btnMonth->data().toInt() == 1)
{
ui->btnMonth->setData(12);
ui->btnYear->setData(ui->btnYear->data().toInt() - 1);
ui->btnYear->setText(QString("%1年").arg(ui->btnYear->data().toInt()));
}
else
{
ui->btnMonth->setData(ui->btnMonth->data().toInt() - 1);
}
ui->btnMonth->setText(DateTime::month().value(ui->btnMonth->data().toInt()));
}
if (btn->month().testFlag(DateTime::NEXT_MONTH_DAY))
{
if (ui->btnMonth->data().toInt() == 12)
{
ui->btnMonth->setData(1);
ui->btnYear->setData(ui->btnYear->data().toInt() + 1);
ui->btnYear->setText(QString("%1年").arg(ui->btnYear->data().toInt()));
}
else
{
ui->btnMonth->setData(ui->btnMonth->data().toInt() + 1);
}
ui->btnMonth->setText(DateTime::month().value(ui->btnMonth->data().toInt()));
}
updateDays(btn->data().toInt());
});
}
// year widget
for (int index = 0; index < 20; ++index)
{
auto btn = new ButtonDay(index + 1);
btn->setFixedSize(QSize(60, 30));
ui->gridLayoutYears->addWidget(btn, index / 4, index % 4);
// btn->setData(ui->dateEdit->date().year() - 10 + index);
btn->setText(QString("%1年").arg(btn->data().toInt()));
btn->setRole(DateTime::OTHER);
m_yearList.append(QVariant::fromValue(static_cast<void*>(btn)));
connect(btn, &QPushButton::clicked, this, [this]
{
for (const auto& pbt : m_yearList)
{
auto pb = static_cast<ButtonDay*>(pbt.value<void*>());
if (Q_NULLPTR == pb)
{
continue;
}
if (pb->role().testFlag(DateTime::CURRENT_YEAR))
{
pb->setRole(DateTime::OTHER);
break;
}
}
auto const btn = qobject_cast<ButtonDay*>(sender());
btn->setRole(DateTime::CURRENT_YEAR);
ui->stackedWidget->setCurrentWidget(ui->wdgCalendar);
ui->btnYear->setData(btn->data());
ui->btnYear->setText(QString("%1年").arg(btn->data().toInt()));
// updateDays(ui->dateEdit->date().day());
ui->btnMonth->setVisible(true);
ui->btnPrev->setVisible(true);
ui->btnNext->setVisible(true);
ui->wdgConfirm->setVisible(true);
});
}
connect(ui->btnYear, &QPushButton::clicked, this, [this]
{
int index = 0;
for (const auto& pbt : m_yearList)
{
auto btn = static_cast<ButtonDay*>(pbt.value<void*>());
if (Q_NULLPTR == btn)
{
continue;
}
btn->setData(ui->btnYear->data().toInt() - 10 + index++);
btn->setText(QString("%1年").arg(btn->data().toInt()));
btn->setRole(ui->btnYear->data().toInt() == btn->data().toInt() ? DateTime::CURRENT_YEAR : DateTime::OTHER);
}
ui->stackedWidget->setCurrentWidget(ui->wdgYears);
ui->btnMonth->setVisible(false);
ui->btnPrev->setVisible(false);
ui->btnNext->setVisible(false);
ui->wdgConfirm->setVisible(false);
});
connect(ui->btnToday, &QPushButton::clicked, this, [this]
{
QDate dt = QDate::currentDate();
ui->btnMonth->setData(dt.month());
ui->btnYear->setData(dt.year());
ui->btnMonth->setText(DateTime::month().value(dt.month()));
ui->btnYear->setText(QString("%1年").arg(dt.year()));
updateDays(dt.day());
});
connect(ui->btnConfirm, &QPushButton::clicked, this, [this]
{
Q_EMIT signal_dateTime(m_date1);
Q_EMIT signal_cancel();
});
connect(ui->btnCancel, &QPushButton::clicked, this, [this]
{
emit signal_cancel();
});
connect(ui->btnPrev, &QPushButton::clicked, this, [this]
{
int _days = getFirstDay();
if (ui->btnMonth->data().toInt() == 1)
{
ui->btnMonth->setData(12);
ui->btnYear->setData(ui->btnYear->data().toInt() - 1);
ui->btnYear->setText(QString("%1年").arg(ui->btnYear->data().toInt()));
}
else
{
ui->btnMonth->setData(ui->btnMonth->data().toInt() - 1);
}
ui->btnMonth->setText(DateTime::month().value(ui->btnMonth->data().toInt()));
updateDays(_days);
});
connect(ui->btnNext, &QPushButton::clicked, this, [this]
{
int _days = getFirstDay();
if (ui->btnMonth->data().toInt() == 12)
{
ui->btnMonth->setData(1);
ui->btnYear->setData(ui->btnYear->data().toInt() + 1);
ui->btnYear->setText(QString("%1年").arg(ui->btnYear->data().toInt()));
}
else
{
ui->btnMonth->setData(ui->btnMonth->data().toInt() + 1);
}
ui->btnMonth->setText(DateTime::month().value(ui->btnMonth->data().toInt()));
updateDays(_days);
});
}
void DateTimeWidget::showEvent(QShowEvent *event)
{
ui->stackedWidget->setCurrentWidget(ui->wdgCalendar);
if(!ui->wdgConfirm->isVisible())
{
ui->btnMonth->setVisible(false);
ui->btnPrev->setVi
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【资源说明】 1、该资源内项目代码都是经过测试运行成功,功能正常的情况下才上传的,请放心下载使用。 2、适用人群:主要针对计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、数学、电子信息等)的同学或企业员工下载使用,具有较高的学习借鉴价值。 3、不仅适合小白学习实战练习,也可作为大作业、课程设计、毕设项目、初期项目立项演示等,欢迎下载,互相学习,共同进步!
资源推荐
资源详情
资源评论
收起资源包目录
基于Qt实现的酒店住宿管理系统源码+项目说明.zip (84个子文件)
code_30312
HotelManagement.pro 2KB
resource.qrc 1KB
Utils
IconHelper.h 852B
IconHelper.cpp 778B
Core
PersistenceData.cc 2KB
RoomRecordManager.cc 5KB
Data.h 3KB
PersistenceData.h 789B
Data.cc 2KB
RoomRecordManager.h 2KB
Mydialog.h 273B
style.qss 6KB
Mydialog.ui 1KB
main.cpp 1KB
MainWindow.cc 2KB
Widgets
IDNumberLineEdit.h 376B
MobilePhoneLineEdit.cc 1KB
DateTimeEdit
date_time_widget.cpp 13KB
date_time_edit.cpp 1KB
button_day.h 1KB
date_time_widget.h 988B
date_time_defines.h 4KB
date_time_widget.ui 23KB
date_time_edit.h 351B
button_day.cpp 1KB
RoomSummaryTable.h 958B
RoomSummaryTable.cc 3KB
IDNumberLineEdit.cc 1KB
MobilePhoneLineEdit.h 392B
Dialogs
Mydialog.h 373B
Mydialog.ui 2KB
LoginDialog.cpp 4KB
LoginDialog.h 1KB
Mydialog.cpp 665B
LoginDialog.ui 11KB
.gitignore 762B
images
radio_selected.png 1024B
question.png 4KB
left.png 4KB
select.png 9KB
find.png 7KB
right_hover.png 4KB
right_pressed.png 4KB
radio_normal.png 888B
double.ico 32KB
calendar.png 3KB
info.png 3KB
close.png 7KB
calendar_hover.png 3KB
left_hover.png 4KB
delete.png 6KB
right.png 4KB
room
dual.jpg 77KB
deluxe.jpg 111KB
president.jpg 191KB
single.jpg 80KB
update.png 8KB
calendar_selected.png 3KB
left_pressed.png 4KB
MainWindow.ui 706B
Mydialog.cpp 201B
fonts
fontawesome-webfont.ttf 138KB
MainWindow.h 1KB
Pages
SearchPersonPage.h 463B
SearchRoomPage.cc 3KB
SystemPage.cc 1KB
SearchRoomPage.h 635B
SearchRoomPage.ui 4KB
CheckInPage.h 509B
SearchPage.h 370B
SearchPage.ui 2KB
CheckOutPage.cc 3KB
SystemPage.ui 2KB
CheckOutPage.ui 6KB
SearchPage.cc 554B
BookingPage.h 925B
SearchPersonPage.cc 2KB
SearchPersonPage.ui 10KB
SystemPage.h 476B
CheckOutPage.h 529B
BookingPage.ui 7KB
CheckInPage.cc 4KB
BookingPage.cc 3KB
CheckInPage.ui 10KB
共 84 条
- 1
资源评论
龙年行大运
- 粉丝: 1385
- 资源: 3960
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 集装箱吊车门机起重机电气电器图纸一套这是调试后的最终版图纸,含程序,元件清单,集装箱的,供学习参考用,这是电气图纸,没有机械的 plc是315-2dp,行车图纸有很多,串电阻的,各种变频,plc通讯
- 用html表单元素画的一棵旋转圣诞树
- 本地磁盘随意学习提供使用
- 职业与睡眠健康.zip
- 本地磁盘随意学习提供使用
- 墙外unity下载报错,版本2021.3.1f1
- 基于支持向量机(SVM)的手写字母识别 matlab代码
- Cursor安装包,想学习的Cursor可以免费使用
- Yealink VC Desktop1.28.0.72, 免费,局域网,IP电话, SIP, VOIP, 视频通话,可与手机互通,手机上也安装 yealink, apk包
- 日常业务完整版.pdf
- 基于S7-200 PLC和组态王组态切片机控制系统 带解释的梯形图程序,接线图原理图图纸,io分配,组态画面
- 全自动热封冷切制袋机x_t全套技术开发资料100%好用.zip
- CSDN项目管理系统 2024-11-01T15-51-11+011800.html
- 12.27ppt.zip
- FURIN Promoter 甲基化水平预测糖尿病.zip
- 热水壶自动ZN-Q5卷边机sw14可编辑全套技术开发资料100%好用.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功