Skip to content

Commit 3a4600c

Browse files
committed
fix: prevent itemSpacing override in setBackgroundType
1. Removed automatic itemSpacing adjustment in DListView::setBackgroundType 2. Added itemSpacing() method in DStyledItemDelegate to dynamically calculate spacing based on background type 3. Changed itemSpacing member to spacing with default value -1 to indicate custom spacing 4. Updated all references to use the new itemSpacing() method The changes prevent the itemSpacing value from being unintentionally overwritten when setting backgroundType, while maintaining backward compatibility with the default spacing values for different background types. This gives more control to developers to set custom spacing values that won't be overridden by background type changes. fix: 修复设置背景类型时覆盖itemSpacing值的问题 1. 移除了DListView::setBackgroundType中自动调整itemSpacing的逻辑 2. 在DStyledItemDelegate中添加itemSpacing()方法根据背景类型动态计算间距 3. 将itemSpacing成员改为spacing并设置默认值-1表示自定义间距 4. 更新所有引用以使用新的itemSpacing()方法 这些修改防止了在设置backgroundType时意外覆盖itemSpacing值的问题,同时保 持了对不同背景类型默认间距值的向后兼容性。这为开发者提供了更多控制权,可 以设置不会被背景类型更改覆盖的自定义间距值。
1 parent a21622a commit 3a4600c

File tree

2 files changed

+20
-15
lines changed

2 files changed

+20
-15
lines changed

src/widgets/dlistview.cpp

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -776,14 +776,6 @@ void DListView::setBackgroundType(DStyledItemDelegate::BackgroundType background
776776
{
777777
if (DStyledItemDelegate *d = qobject_cast<DStyledItemDelegate *>(itemDelegate())) {
778778
d->setBackgroundType(backgroundType);
779-
780-
if (d->backgroundType() == DStyledItemDelegate::RoundedBackground) {
781-
d->setItemSpacing(10);
782-
} else if (d->backgroundType() == DStyledItemDelegate::ClipCornerBackground) {
783-
d->setItemSpacing(1);
784-
} else {
785-
d->setItemSpacing(0);
786-
}
787779
}
788780
}
789781

src/widgets/dstyleditemdelegate.cpp

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -516,10 +516,23 @@ class DStyledItemDelegatePrivate : public DCORE_NAMESPACE::DObjectPrivate
516516
}
517517
}
518518

519+
520+
inline int itemSpacing() const
521+
{
522+
if (spacing >= 0)
523+
return spacing;
524+
const auto type = backgroundType & DStyledItemDelegate::BackgroundType_Mask;
525+
if (type == DStyledItemDelegate::RoundedBackground)
526+
return 10;
527+
if (type == DStyledItemDelegate::ClipCornerBackground)
528+
return 1;
529+
return 0;
530+
}
531+
519532
DStyledItemDelegate::BackgroundType backgroundType = DStyledItemDelegate::NoBackground;
520533
QMargins margins;
521534
QSize itemSize;
522-
int itemSpacing = 0;
535+
int spacing = -1;
523536
QMap<QModelIndex, QList<QPair<QAction*, QRect>>> clickableActionMap;
524537
QAction *pressedAction = nullptr;
525538
QList<QPointer<QWidget>> lastWidgets;
@@ -1176,9 +1189,9 @@ QSize DStyledItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QM
11761189
const QListView * lv = qobject_cast<const QListView*>(option.widget);
11771190
if (lv) {
11781191
if (lv->flow() == QListView::LeftToRight) {
1179-
size.rwidth() += d->itemSpacing;
1192+
size.rwidth() += d->itemSpacing();
11801193
} else {
1181-
size.rheight() += d->itemSpacing;
1194+
size.rheight() += d->itemSpacing();
11821195
}
11831196
}
11841197

@@ -1253,7 +1266,7 @@ int DStyledItemDelegate::spacing() const
12531266
{
12541267
D_DC(DStyledItemDelegate);
12551268

1256-
return d->itemSpacing;
1269+
return d->itemSpacing();
12571270
}
12581271

12591272
void DStyledItemDelegate::setBackgroundType(DStyledItemDelegate::BackgroundType type)
@@ -1297,7 +1310,7 @@ void DStyledItemDelegate::setItemSpacing(int spacing)
12971310
{
12981311
D_D(DStyledItemDelegate);
12991312

1300-
d->itemSpacing = spacing;
1313+
d->spacing = spacing;
13011314
}
13021315

13031316
void DStyledItemDelegate::initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const
@@ -1353,9 +1366,9 @@ void DStyledItemDelegate::initStyleOption(QStyleOptionViewItem *option, const QM
13531366
const QListView * lv = qobject_cast<const QListView*>(option->widget);
13541367
if (lv) {
13551368
if (lv->flow() == QListView::LeftToRight) {
1356-
option->rect.adjust(0, 0, 0 - d->itemSpacing, 0);
1369+
option->rect.adjust(0, 0, 0 - d->itemSpacing(), 0);
13571370
} else {
1358-
option->rect.adjust(0, 0, 0, 0 - d->itemSpacing);
1371+
option->rect.adjust(0, 0, 0, 0 - d->itemSpacing());
13591372
}
13601373
if (lv->window() && lv->window()->isActiveWindow()) {
13611374
option->state |= QStyle::State_Active;

0 commit comments

Comments
 (0)