QHeaderView: take the sort indicator into account when eliding text

By adding PM_HeaderMarkSize to the margins if the section is showing
a sort indicator. Turns out that that particular enum was actually
unused in QtWidgets (!), so tune the value to match reality.

Task-number: QTBUG-629
Change-Id: I8bc70451656d634a064c8b5014e449977c55aa9d
Reviewed-by: Cristian Oneț <onet.cristian@gmail.com>
Reviewed-by: Thorbjørn Lund Martsum <tmartsum@gmail.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
bb10
Giuseppe D'Angelo 2014-11-12 14:13:13 +01:00
parent b5f8502c12
commit b39bbc95f6
2 changed files with 10 additions and 3 deletions

View File

@ -1550,7 +1550,7 @@ int QHeaderView::minimumSectionSize() const
Q_D(const QHeaderView);
if (d->minimumSectionSize == -1) {
QSize strut = QApplication::globalStrut();
int margin = style()->pixelMetric(QStyle::PM_HeaderMargin, 0, this);
int margin = 2 * style()->pixelMetric(QStyle::PM_HeaderMargin, 0, this);
if (d->orientation == Qt::Horizontal)
return qMax(strut.width(), (fontMetrics().maxWidth() + margin));
return qMax(strut.height(), (fontMetrics().height() + margin));
@ -2663,7 +2663,14 @@ void QHeaderView::paintSection(QPainter *painter, const QRect &rect, int logical
opt.iconAlignment = Qt::AlignVCenter;
opt.text = d->model->headerData(logicalIndex, d->orientation,
Qt::DisplayRole).toString();
const int margin = 2 * style()->pixelMetric(QStyle::PM_HeaderMargin, 0, this);
int margin = 2 * style()->pixelMetric(QStyle::PM_HeaderMargin, 0, this);
const Qt::Alignment headerArrowAlignment = static_cast<Qt::Alignment>(style()->styleHint(QStyle::SH_Header_ArrowAlignment, 0, this));
const bool isHeaderArrowOnTheSide = headerArrowAlignment & Qt::AlignVCenter;
if (isSortIndicatorShown() && sortIndicatorSection() == logicalIndex && isHeaderArrowOnTheSide)
margin += style()->pixelMetric(QStyle::PM_HeaderMarkSize, 0, this);
if (d->textElideMode != Qt::ElideNone)
opt.text = opt.fontMetrics.elidedText(opt.text, d->textElideMode , rect.width() - margin);

View File

@ -4587,7 +4587,7 @@ int QCommonStyle::pixelMetric(PixelMetric m, const QStyleOption *opt, const QWid
ret = int(QStyleHelper::dpiScaled(4.));
break;
case PM_HeaderMarkSize:
ret = int(QStyleHelper::dpiScaled(32.));
ret = int(QStyleHelper::dpiScaled(16.));
break;
case PM_HeaderGripMargin:
ret = int(QStyleHelper::dpiScaled(4.));