#include "PicDateItem.h" #include #include #include "LogInfo.h" #include "ItemCommon.h" PicDateItem::PicDateItem(QGraphicsItem *parent, QGraphicsScene *scene, const SourceType type) :PicTextItem(parent, scene, type) { m_timer.setInterval(20); connect(&m_timer, &QTimer::timeout, [this](){ updateDatetimeStr(); }); m_timer.start(); } QVariant PicDateItem::source() { return m_model.datetimePattern; } void PicDateItem::setSource(QVariant var) { m_model.datetimePattern = var.toString(); if(m_model.datetimePattern.isEmpty()) return; m_currDateTimeStr = generateTxtFromDateItemModel(m_model, QDateTime::currentDateTime()); applyModify(); } void PicDateItem::setModel(DateItemModel model) { m_model = std::move(model); setSource(m_model.datetimePattern); } const DateItemModel& PicDateItem::model() const { return m_model; } bool PicDateItem::updateDatetimeStr() { if (m_model.datetimePattern.isEmpty()) return false; if(m_currDateTimeStr.isEmpty()) { m_currDateTimeStr = generateTxtFromDateItemModel(m_model, QDateTime::currentDateTime()); applyModify(); return true; } auto now = QDateTime::currentDateTime(); auto str = generateTxtFromDateItemModel(m_model, now); if(str == m_currDateTimeStr) { return false; } m_currDateTimeStr = str; applyModify(); return true; } void PicDateItem::setCustomAttrs(const QXmlStreamAttributes &attrs) { // 结构类似这样 // weeksMap = "MON
TUR
WED
TUE
THU
FRI
SAT
SUN" // yearsMap = "20232023年
20242024年
20252025年" auto m = DateItemModel(); m.dataMap = attrs.value("dataMap").toString().split("
"); m.daysMap = attrs.value("daysMap").toString().split("
"); m.hoursMap = attrs.value("hoursMap").toString().split("
"); m.monthsMap = attrs.value("monthsMap").toString().split("
"); m.weeksMap = attrs.value("weeksMap").toString().split("
"); auto yearsMap = attrs.value("yearsMap").toString().split("
"); for(auto it = yearsMap.begin(); it != yearsMap.end(); ++it) { auto yearPair = it->split(""); if(yearPair.size() == 2) { m.yearsMap[yearPair[0].toInt()] = yearPair[1]; } } m.monthsOffset = attrs.value("monthsOffset").toInt(); m.daysOffset = attrs.value("daysOffset").toInt(); m.datetimePattern = attrs.value("datetimePattern").toString(); setModel(std::move(m)); } void PicDateItem::saveCustomAttrs(QXmlStreamAttributes &attrs) { auto dataMap = m_model.dataMap.join("
"); auto daysMap = m_model.daysMap.join("
"); auto hoursMap = m_model.hoursMap.join("
"); auto monthsMap = m_model.monthsMap.join("
"); auto weeksMap = m_model.weeksMap.join("
"); QString yearsMap; for(auto it = m_model.yearsMap.begin(); it != m_model.yearsMap.end(); ++it) { yearsMap.append(QString("%1%2
").arg(it.key()).arg(it.value())); } attrs.append("dataMap", dataMap); attrs.append("daysMap", daysMap); attrs.append("hoursMap", hoursMap); attrs.append("monthsMap", monthsMap); attrs.append("weeksMap", weeksMap); attrs.append("yearsMap", yearsMap); attrs.append("datetimePattern", m_model.datetimePattern); attrs.append("monthsOffset", QString::number(m_model.monthsOffset)); attrs.append("daysOffset", QString::number(m_model.daysOffset)); } QImage PicDateItem::itemImage() { if(m_model.datetimePattern.isEmpty()) return QImage(); auto ret = strToImage(m_currDateTimeStr); return ret; }