From bdd4c4b7221ee94ab878ad2e0f8a565729991599 Mon Sep 17 00:00:00 2001 From: zhaoyingzhen Date: Fri, 13 Jan 2023 16:41:43 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=A0=8F=E6=97=B6=E9=97=B4=E6=97=A5=E6=9C=9F=E6=96=87=E5=AD=97?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E5=BC=82=E5=B8=B8=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 系统改变字体后,注销后时间日期显示异常;高效模式下,拉动高度时间字体无变化的问题。 Log: Bug: https://pms.uniontech.com/bug-view-181387.html Influence: 时间和日期显示。 Change-Id: I1d35d35afa54095ddd631775d7b9f190c53779fa --- frame/window/components/datetimedisplayer.cpp | 50 ++++++++++++------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/frame/window/components/datetimedisplayer.cpp b/frame/window/components/datetimedisplayer.cpp index 5264667aa..0c7ed0316 100644 --- a/frame/window/components/datetimedisplayer.cpp +++ b/frame/window/components/datetimedisplayer.cpp @@ -224,20 +224,29 @@ DateTimeDisplayer::DateTimeInfo DateTimeDisplayer::dateTimeInfo(const Dock::Posi info.m_dateRect = QRect(0, DATETIMESIZE / 2 + 1, textWidth, DATETIMESIZE / 2); return info; } - int timeWidth = QFontMetrics(timeFont()).boundingRect(info.m_time).width() + 3; - int dateWidth = QFontMetrics(m_dateFont).boundingRect(info.m_date).width() + 2; + int timeWidth = QFontMetrics(timeFont()).boundingRect(info.m_time).width(); + int dateWidth = QFontMetrics(m_dateFont).boundingRect(info.m_date).width(); + // 如果是上下方向 if (m_showMultiRow) { - // 日期时间多行显示(一般是高效模式下) - info.m_timeRect = QRect(0, 0, timeWidth, height() / 2); - info.m_dateRect = QRect(0, height() / 2, dateWidth, height() / 2); + // 日期时间多行显示(一般是高效模式下,向下和向上偏移2个像素) + info.m_timeRect = QRect(0, 2, timeWidth, height() / 2); + info.m_dateRect = QRect(0, height() / 2 -2, dateWidth, height() / 2); } else { - info.m_timeRect = QRect(ITEMSPACE, 0, timeWidth, height()); - int dateX = rect().width() - QFontMetrics(m_dateFont).width(info.m_date) - 2 - ITEMSPACE; - // 如果时间的X坐标小于日期的X坐标,需要手动设置坐标在日期坐标的右侧 - if (dateX < info.m_timeRect.right()) - dateX = info.m_timeRect.right(); - info.m_dateRect = QRect(dateX, 0, dateWidth, height()); + // 3:时间和日期3部分间隔 + if (rect().width() > (ITEMSPACE * 3 + timeWidth + dateWidth)) { + info.m_timeRect = QRect(ITEMSPACE, 0, timeWidth, height()); + + int dateX = info.m_timeRect.right() + (rect().width() -(ITEMSPACE * 2 + timeWidth + dateWidth)); + info.m_dateRect = QRect(dateX, 0, dateWidth, height()); + } else { + // 宽度不满足间隔为ITEMSPACE的,需要自己计算间隔。 + int itemSpace = (rect().width() - timeWidth - dateWidth) / 3; + info.m_timeRect = QRect(itemSpace, 0, timeWidth, height()); + + int dateX = info.m_timeRect.right() + itemSpace; + info.m_dateRect = QRect(dateX, 0, dateWidth, height()); + } } return info; @@ -287,12 +296,20 @@ void DateTimeDisplayer::paintEvent(QPaintEvent *e) int timeAlignFlag = Qt::AlignCenter; int dateAlignFlag = Qt::AlignCenter; + + QFont strTimeFont = timeFont(); + if (m_showMultiRow) { timeAlignFlag = Qt::AlignHCenter | Qt::AlignBottom; dateAlignFlag = Qt::AlignHCenter | Qt::AlignTop; + } else { + if (strTimeFont.pixelSize() >= rect().height()) { + strTimeFont.setPixelSize(rect().height() - 2); + m_dateFont.setPixelSize(rect().height() - 2); + } } - painter.setFont(timeFont()); + painter.setFont(strTimeFont); painter.drawText(textRect(info.m_timeRect), timeAlignFlag, info.m_time); painter.setFont(m_dateFont); painter.drawText(textRect(info.m_dateRect), dateAlignFlag, info.m_date); @@ -333,18 +350,17 @@ QFont DateTimeDisplayer::timeFont() const if (m_position == Dock::Position::Left || m_position == Dock::Position::Right) return DFontSizeManager::instance()->t6(); +#define MINHEIGHT 40 + // 如果是上下方向,且当前只有一行,则始终显示小号字体 - if (m_oneRow) + if (m_oneRow || rect().height() <= MINHEIGHT) return DFontSizeManager::instance()->t10(); static QList dateFontSize = { DFontSizeManager::instance()->t10(), DFontSizeManager::instance()->t9(), DFontSizeManager::instance()->t8(), - DFontSizeManager::instance()->t7(), - DFontSizeManager::instance()->t6() }; + DFontSizeManager::instance()->t7() }; -#define MINHEIGHT 16 - // 获取最低高度为16,找到对应的索引值 int index = qMin(qMax(static_cast((rect().height() - MINHEIGHT) / 3), 0), dateFontSize.size() - 1); return dateFontSize[index]; }