Skip to content

Commit 940c48d

Browse files
BLumiadeepin-bot[bot]
authored andcommitted
fix: tooltip size might not updated when font size changed
目前TipsWidget控件的尺寸会在字体变化时通过调用setText()更新,但当文字 内容无变化时会跳过后续逻辑,导致尺寸未变化. 此提交通过重新实现 (minimum)sizeHint() 来提供控件期望的尺寸大小,并 确保尺寸能够及时更新. PMS: BUG-332523 Log:
1 parent 30f3f20 commit 940c48d

4 files changed

Lines changed: 38 additions & 37 deletions

File tree

plugins/dde-dock/power/powerplugin.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -349,10 +349,7 @@ void PowerPlugin::refreshTipsData()
349349
}
350350
}
351351

352-
m_tipsLabel->setText(tips);
353-
QFontMetrics metrics(m_tipsLabel->font());
354-
int textWidth = metrics.boundingRect(m_tipsLabel->text()).width();
355-
m_tipsLabel->setMinimumWidth(textWidth);
352+
m_tipsLabel->setText(tips);
356353
m_powerStatusWidget->refreshBatteryPercentage(value, appletTips);
357354
}
358355

plugins/dde-dock/widgets/tipswidget.cpp

Lines changed: 34 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,7 @@ void TipsWidget::setText(const QString &text)
3737
m_text = "བོད་སྐད་ཡིག་གཟུགས་ཚད་ལེན་ཚོད་ལྟའི་སྐོར་གྱི་རྗོད་ཚིག";
3838
#endif
3939

40-
setFixedSize(fontMetrics().horizontalAdvance(m_text), fontMetrics().boundingRect(m_text).height());
41-
if (parentWidget()) {
42-
parentWidget()->adjustSize();
43-
}
44-
40+
updateGeometry();
4541
update();
4642

4743
#ifndef QT_NO_ACCESSIBILITY
@@ -60,18 +56,7 @@ void TipsWidget::setTextList(const QStringList &textList)
6056
}
6157
m_textList = textList;
6258

63-
int width = 0;
64-
int height = 0;
65-
for (const QString& text : m_textList) {
66-
width = qMax(width, fontMetrics().horizontalAdvance(text));
67-
height += fontMetrics().boundingRect(text).height();
68-
}
69-
70-
setFixedSize(width, height);
71-
if (parentWidget()) {
72-
parentWidget()->adjustSize();
73-
}
74-
59+
updateGeometry();
7560
update();
7661
}
7762

@@ -110,25 +95,45 @@ void TipsWidget::paintEvent(QPaintEvent *event)
11095
}
11196
}
11297

98+
QSize TipsWidget::sizeHint() const
99+
{
100+
const QFontMetrics fm = fontMetrics();
101+
102+
switch (m_type) {
103+
case SingleLine: {
104+
return QSize(fm.horizontalAdvance(m_text),
105+
fm.boundingRect(m_text).height());
106+
}
107+
case MultiLine: {
108+
int maxWidth = 0;
109+
int totalHeight = 0;
110+
for (const QString& text : m_textList) {
111+
maxWidth = qMax(maxWidth, fm.horizontalAdvance(text));
112+
totalHeight += fm.boundingRect(text).height();
113+
}
114+
115+
return QSize(maxWidth, totalHeight);
116+
}
117+
}
118+
119+
Q_UNREACHABLE_RETURN(QSize(0, 0));
120+
}
121+
113122
bool TipsWidget::event(QEvent *event)
114123
{
115124
if (event->type() == QEvent::FontChange) {
116-
switch (m_type) {
117-
case SingleLine:
118-
{
119-
setText(m_text);
120-
break;
121-
}
122-
case MultiLine:
123-
{
124-
setTextList(m_textList);
125-
break;
126-
}
127-
}
125+
updateGeometry();
126+
update();
128127
} else if (event->type() == QEvent::MouseButtonRelease
129128
&& static_cast<QMouseEvent *>(event)->button() == Qt::RightButton) {
130129
return true;
131130
}
132131
return QFrame::event(event);
133132
}
133+
134+
QSize TipsWidget::minimumSizeHint() const
135+
{
136+
return sizeHint();
137+
}
138+
134139
}

plugins/dde-dock/widgets/tipswidget.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,12 @@ class TipsWidget : public QFrame
2222
const QStringList &textList() { return m_textList; }
2323
void setText(const QString &text);
2424
void setTextList(const QStringList &textList);
25+
QSize sizeHint() const override;
2526

2627
protected:
2728
void paintEvent(QPaintEvent *event) override;
2829
bool event(QEvent *event) override;
30+
QSize minimumSizeHint() const override;
2931

3032
private:
3133
QString m_text;

src/loader/pluginitem.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -334,10 +334,7 @@ QWidget * PluginItem::itemTooltip(const QString &itemKey)
334334
// add content margin, tooltip popup do not need to set padding
335335
layout->setContentsMargins(8, 4, 8, 4);
336336
layout->addWidget(toolTip);
337-
// fixme: 这个设置会导致widget resize, 当任务栏在右的时候,窗口变化会会遮住鼠标导致leaveEvent触发,tooltip消失
338-
if (itemKey.contains("network")) {
339-
layout->setSizeConstraint(QLayout::SetFixedSize);
340-
}
337+
layout->setSizeConstraint(QLayout::SetFixedSize);
341338
toolTip->setVisible(true);
342339
} else {
343340
// can update tooltip content

0 commit comments

Comments
 (0)