Итак, у меня есть QComboBox.QComboBox предоставил текст по выбранному элементу
Если currentText() слишком длинный для виджета, то я хочу, чтобы показать многоточие.
Как это:
Итак:
void MyComboBox::paintEvent(QPaintEvent *)
{
QStylePainter painter(this);
QStyleOptionComboBox opt;
initStyleOption(&opt);
painter.drawComplexControl(QStyle::CC_ComboBox, opt);
QRect rect = this->rect();
//this is not ideal
rect.setLeft(rect.left() + 7);
rect.setRight(rect.width() - 15);
//
QTextOption option;
option.setAlignment(Qt::AlignVCenter);
QFontMetrics fontMetric(painter.font());
const QString elidedText = QAbstractItemDelegate::elidedText(fontMetric, rect.width(), Qt::ElideRight, this->currentText());
painter.drawText(rect, elidedText, option);
}
Это работает flawlessy. Проблема заключается в коде между комментариями, потому что я жестко кодирую расстояния от левой и правой границы. Это заставляет меня съеживаться.
Результат без этого кода:
Кто-нибудь знает более общий способ сделать это, без жесткого кодирования? Спасибо
благодарим за предложение .. как только у меня есть время, я попытаюсь исследовать то, что вы предложили! –
Он работает безупречно! Спасибо! –