2012-01-23 1 views
4

Я бы хотел сделать QPushButton перенос слов и развернуть его вместо ширины. Как я могу это сделать?Есть ли способ включить перенос текста текста на некоторые простые виджеты, такие как QPushButton?

+4

Вчера мы рассмотрели возможность отображения 'QLabel' на' QPushButton', вы можете использовать этот метод: http://stackoverflow.com/a/8960548/774651 – Lol4t0

ответ

2

Для переноса слов в обычный QPushButton вы можете реализовать класс прокси-класса, полученный из QProxyStyle.

/** 
proxy style for text wrapping in pushbutton 
*/ 
class QtPushButtonStyleProxy : public QProxyStyle 
{ 
public: 
    /** 
    Default constructor. 
    */ 
    QtPushButtonStyleProxy() 
     : QProxyStyle() 
    { 
    } 

    virtual void drawItemText(QPainter *painter, const QRect &rect, 
     int flags, const QPalette &pal, bool enabled, 
     const QString &text, QPalette::ColorRole textRole) const 
    { 
     flags |= Qt::TextWordWrap;  
     QProxyStyle::drawItemText(painter, rect, flags, pal, enabled, text, textRole); 
    } 

private: 
    Q_DISABLE_COPY(QtPushButtonStyleProxy) 
}; 

И позже в собственном MyQtPushButton:

MyQtPushButton::MyQtPushButton() 
    : QPushButton() 
{ 
    setStyle(new QtPushButtonStyleProxy()); 
} 

Смотрите дополнительную информацию о классе QProxyStyle в Qt документации.

2

Возможно, что-то не так. Кнопки не должны содержать много текста, а несколько слов, описывающих действия, которые необходимо предпринять. Если вы хотите сделать это многострочным, вам лучше подумать о предоставлении QLabel с соответствующим описанием.

В любом случае, я не знаю [способ поддержки Qt], чтобы это сделать. Такая же проблема существует, например, для подписи QHeaderView, где она может быть еще более применимой. Вручную, вы всегда можете сделать это, добавив в строки заголовков "\n" (которые вы можете автоматизировать наверняка).

+1

Ну, это делает многострочный не совсем мой запрос. Тем не менее, в нынешней ситуации я согласен с этим, поскольку кнопка должна быть большой и нажиматься на сенсорный экран. Так или иначе, это не должно выглядеть как обычная кнопка. – Septagram

+0

Рассмотрите возможность написания собственного класса кнопок? :) –

+0

Вы всегда можете перейти на уровень создания пользовательских виджетов. Суть заключается в том, чтобы как можно больше зависеть от существующих компонентов. –

1

Существует solution, используя текст на графике SVG. Проверь это.

3

Используйте QToolButton вместо QPushButton. QToolButton может использовать многострочный текст, а размер QToolButton легче контролировать, чем размер QPushButton.

+2

Не кажется настолько очевидным, как включить перенос слов в QToolButton. Нет метода 'QToolButton :: setWordWrap'. – Neptilo

+5

Просто используйте \ n в ярлыке кнопки. – deadbird

+2

@deadbird, но в этом случае это не было бы переносом слов :) То есть, не автоматическая перенос слов;) – Momergil