#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 = ItemUtils::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 = ItemUtils::generateTxtFromDateItemModel(m_model, QDateTime::currentDateTime()); applyModify(); return true; } auto now = QDateTime::currentDateTime(); auto str = ItemUtils::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(); DateItemModel::loadFromXml(m, attrs); setModel(std::move(m)); } void PicDateItem::saveCustomAttrs(QXmlStreamAttributes &attrs) { DateItemModel::saveToXml(m_model, attrs); } QImage PicDateItem::itemImage() { if(m_model.datetimePattern.isEmpty()) return QImage(); auto ret = strToImage(m_currDateTimeStr); return ret; }