123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- #include "fncalender.h"
- #include "ui_fncalender.h"
- FnCalender::FnCalender(QWidget* parent) :
- QWidget(parent),
- ui(new Ui::FnCalender)
- {
- ui->setupUi(this);
- setMouseTracking(true);
- initData();
- }
- FnCalender::~FnCalender()
- {
- delete ui;
- }
- void FnCalender::initData()
- {
- m_hasInit = false;
- m_date = QDate::currentDate();
- for (int i = 1900; i <= 2100; i++)
- {
- ui->cbbYear->addItem(QString("%1年").arg(i), i);
- }
- ui->cbbYear->setCurrentIndex(m_date.year() - 1900);
- for (int i = 1; i <= 12; i++)
- {
- ui->cbbMonth->addItem(QString("%1月").arg(i), i);
- }
- ui->cbbMonth->setCurrentIndex(m_date.month() - 1);
- m_hasInit = true;
- }
- QDate FnCalender::date() const
- {
- return m_date;
- }
- void FnCalender::setDate(const QDate& date)
- {
- m_date = date;
- }
- void FnCalender::changeDate()
- {
- if (!m_hasInit)
- {
- return;
- }
- int y = ui->cbbYear->currentData(Qt::UserRole).toInt();
- int m = ui->cbbMonth->currentData(Qt::UserRole).toInt();
- m_date = QDate::fromString(QString("%1-%2-1").arg(y).arg(m), "yyyy-M-d");
- update();
- }
- void FnCalender::paintEvent(QPaintEvent* event)
- {
- QPoint pt = this->cursor().pos();
- pt = mapFromGlobal(pt);
- QPainter painter;
- painter.begin(this);
- painter.setPen(Qt::NoPen);
- painter.setBrush(Qt::white);
- painter.drawRect(rect());
- QString weekNames[] = {"一", "二", "三", "四", "五", "六", "日"};
- int w = width() / 7;
- int h = (height() - 96) / 6;
- painter.setPen(Qt::black);
- for (int i = 0; i < 7; i++)
- {
- QRect weekNameRc = QRect(i * w, 48, w, 48);
- painter.drawText(weekNameRc, Qt::AlignCenter, weekNames[i]);
- }
- QDate firstDay = m_date.addDays(-m_date.day() + 1);
- int n = firstDay.dayOfWeek() - 1;
- qDebug() << n;
- int days = m_date.daysInMonth();
- int j = 0;
- int k = n;
- for (int i = 0; i < k; i++)
- {
- m_dateDatas[i].rc = QRect(i * w, j * h + 96, w, h);
- m_dateDatas[i].isNull = true;
- m_dateDatas[i].line = 0;
- emit drawExtraInfo(painter, m_dateDatas[i]);
- }
- for (int i = 1; i <= days; i++)
- {
- QRect dayRc = QRect(n * w, j * h + 96, w, h);
- if (dayRc.contains(pt))
- {
- painter.setBrush(QColor(203, 203, 204));
- painter.setPen(Qt::NoPen);
- painter.drawRect(dayRc);
- painter.setPen(Qt::black);
- }
- else
- {
- painter.setPen(Qt::black);
- painter.setBrush(Qt::white);
- }
- QRect textRc = QRect(dayRc.left(), dayRc.top() + 4, dayRc.width(), 24);
- painter.drawText(textRc, Qt::AlignCenter, QString("%1").arg(i));
- m_dateDatas[k].line = j;
- m_dateDatas[k].rc = dayRc;
- m_dateDatas[k].date = QDate::fromString(QString("%1-%2-%3").arg(m_date.year()).arg(m_date.month()).arg(i), "yyyy-M-d");
- n++;
- if (n == 7)
- {
- j++;
- n = 0;
- }
- emit drawExtraInfo(painter, m_dateDatas[k]);
- k++;
- }
- while (k < 42)
- {
- QRect dayRc = QRect(n * w, j * h + 96, w, h);
- m_dateDatas[k].line = j;
- m_dateDatas[k].isNull = true;
- m_dateDatas[k].rc = dayRc;
- n++;
- if (n == 7)
- {
- j++;
- n = 0;
- }
- emit drawExtraInfo(painter, m_dateDatas[k]);
- k++;
- }
- painter.end();
- }
- void FnCalender::mouseMoveEvent(QMouseEvent* event)
- {
- update();
- }
- void FnCalender::on_btnPreMonth_clicked()
- {
- if (ui->cbbMonth->currentIndex() - 1 >= 0)
- {
- ui->cbbMonth->setCurrentIndex(ui->cbbMonth->currentIndex() - 1);
- }
- else
- {
- ui->cbbYear->setCurrentIndex(ui->cbbYear->currentIndex() - 1);
- ui->cbbMonth->setCurrentIndex(11);
- }
- changeDate();
- }
- void FnCalender::on_btnNextMonth_clicked()
- {
- if (ui->cbbMonth->currentIndex() + 1 <= 11)
- {
- ui->cbbMonth->setCurrentIndex(ui->cbbMonth->currentIndex() + 1);
- }
- else
- {
- ui->cbbYear->setCurrentIndex(ui->cbbYear->currentIndex() + 1);
- ui->cbbMonth->setCurrentIndex(0);
- }
- changeDate();
- }
- void FnCalender::on_cbbYear_currentIndexChanged(int index)
- {
- changeDate();
- }
- void FnCalender::on_cbbMonth_currentIndexChanged(int index)
- {
- changeDate();
- }
|