【发布时间】:2017-05-12 15:39:20
【问题描述】:
所以,我有一个 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);
}
这是完美的工作。 问题是 cmets 之间的代码,因为我在硬编码左右边界的距离。它让我畏缩。
没有该代码的结果是:
有人知道没有硬编码的更通用的方法吗? 谢谢
【问题讨论】: