2016-12-28 1 views
1

So habe ich eine QComboBox.QComboBox elide Text auf ausgewählten Artikel

enter image description here

Wenn die current() für das Widget zu lang ist, dann will ich ein Auslassungszeichen zeigen.

So:

enter image description here

So:

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); 
} 

Dies wird flawlessy arbeiten. Das Problem ist der Code zwischen den Kommentaren, weil ich die Abstände von der linken und rechten Grenze hartcodiere. Es bringt mich zum Weinen.

Das Ergebnis ohne dass Code ist:

enter image description here

Kennt jemand eine allgemeinere Art und Weise, dies zu tun, ohne zu? Danke

Antwort

1

Wohin der Text genau gezeichnet werden soll, hängt vom verwendeten Stil ab. Sie können Informationen über (einige) der Positionierung von Unterelementen mit QStyle::subControlRect erhalten. Das Untersteuerelement, das dem Kombinationsfeld-Text am besten entspricht, scheint QStyle::SC_ComboBoxEditField zu sein, obwohl wenn das Element ein Symbol hat, dies auch berücksichtigt werden muss. Wenn die Elemente keine Symbole haben, können Sie mit

gehen

Sie möchten sehen, wie z. QFusionStyle::drawControl funktioniert für Details.

Wenn Sie möchten, dass alle Ihre Kombinationsfelder den Text unterstützen, sollten Sie überlegen, QProxyStyle zu implementieren und nur MyStyle::drawControl für QStyle::CE_ComboBoxLabel zu überschreiben.

+0

danke für den Vorschlag .. sobald ich etwas Zeit habe, werde ich versuchen zu untersuchen, was Sie vorgeschlagen haben! –

+0

Es funktioniert einwandfrei! Vielen Dank! –

Verwandte Themen