Как выровнять текст (один) QToolButton

у меня есть QToolButton. Я использую это вместо QPushButton потому что мне нужна кнопка, похожая на ярлык. QPushButton слишком коренастый даже после установки границ таблицы стилей и отступов None-0px,

Я хотел бы это QToolButton содержать текст (без значка) выравнивание вправо.

Тем не мение, text-align: right; не работает. .setAlignment(Qt.AlignRight) тоже не работает.

Как я могу выровнять текст вправо?

Спасибо.

4

Решение

Вы можете попытаться создать подкласс QStyle и повторно реализовать QStyle :: drawControl () для выравнивания текста вправо. Проверьте файл qt / src / gui / styles / qcommonstyle.cpp, чтобы увидеть, как это делается. (Извините, я использую C ++, а не Python)

case CE_ToolButtonLabel:
if (const QStyleOptionToolButton *toolbutton
= qstyleoption_cast<const QStyleOptionToolButton *>(opt)) {
QRect rect = toolbutton->rect;
int shiftX = 0;
int shiftY = 0;
if (toolbutton->state & (State_Sunken | State_On)) {
shiftX = proxy()->pixelMetric(PM_ButtonShiftHorizontal, toolbutton, widget);
shiftY = proxy()->pixelMetric(PM_ButtonShiftVertical, toolbutton, widget);
}
// Arrow type always overrules and is always shown
bool hasArrow = toolbutton->features & QStyleOptionToolButton::Arrow;
if (((!hasArrow && toolbutton->icon.isNull()) && !toolbutton->text.isEmpty())
|| toolbutton->toolButtonStyle == Qt::ToolButtonTextOnly) {
int alignment = Qt::AlignCenter | Qt::TextShowMnemonic;
3

Другие решения

Этот пример выравнивания содержимого кнопки (значок & текст), но вы можете принять этот пример к своим требованиям (выравнивание вправо). Переопределите QToolButoon :: paintEvent следующим образом:

void CMyToolButton::paintEvent( QPaintEvent* )
{
QStylePainter sp( this );
QStyleOptionToolButton opt;
initStyleOption( &opt );
const QString strText = opt.text;
const QIcon icn = opt.icon;
//draw background
opt.text.clear();
opt.icon = QIcon();
sp.drawComplexControl( QStyle::CC_ToolButton, opt );
//draw content
const int nSizeHintWidth = minimumSizeHint().width();
const int nDiff = qMax( 0, ( opt.rect.width() - nSizeHintWidth ) / 2 );
opt.text = strText;
opt.icon = icn;
opt.rect.setWidth( nSizeHintWidth );//reduce paint area to minimum
opt.rect.translate( nDiff, 0 );//offset paint area to center
sp.drawComplexControl( QStyle::CC_ToolButton, opt );
}
0

По вопросам рекламы [email protected]