fix(ribbon): calcular ancho mínimo de botones desde métricas de texto

Qt dimensiona QToolButton por el ícono (22px), no por el texto, lo que
causaba que etiquetas como 'Nuevo Tq.' se cortaran al renderizar.
Ahora add_button() usa fontMetrics().horizontalAdvance(text)+20 para
establecer setMinimumWidth() correcto en cada botón.

Además: RibbonBar.setFixedHeight(110) (antes 92), padding y font-size
del ribbonButton QSS aumentados ligeramente para mejor legibilidad.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-05-27 00:35:03 -04:00
parent 0c15b5aeeb
commit 135f097079
2 changed files with 16 additions and 7 deletions
+9 -1
View File
@@ -689,6 +689,14 @@ class RibbonGroup(QFrame):
btn.setEnabled(enabled)
if slot:
btn.clicked.connect(slot)
# Forzar ancho mínimo basado en el texto para que nunca se parta en 2 líneas.
# Qt calcula el ancho por el ícono (22 px), no por el texto →
# "Nuevo Tq." se rompe y la segunda línea queda cortada.
fm = btn.fontMetrics()
min_w = max(56, fm.horizontalAdvance(text) + 20)
btn.setMinimumWidth(min_w)
self._btn_lo.addWidget(btn)
return btn
@@ -709,7 +717,7 @@ class RibbonBar(QWidget):
def __init__(self, parent: Optional[QWidget] = None) -> None:
super().__init__(parent)
self.setObjectName("ribbonBar")
self.setFixedHeight(92)
self.setFixedHeight(110) # 26 tab-row + 84 content (suficiente para 22px icon + texto 1 línea + título grupo)
self._tab_btns: list[QToolButton] = []
self._build_ui()