Есть ли способ включить перенос текста в некоторых простых виджетах, таких как QPushButton? - PullRequest
6 голосов
/ 23 января 2012

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

Ответы [ 5 ]

6 голосов
/ 23 января 2012

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

2 голосов
/ 28 августа 2018

Я решил проблему с переносом слов на кнопке следующим образом:

QPushButton *createQPushButtonWithWordWrap(QWidget *parent, const QString &text)
{
   auto btn = new QPushButton(parent);
   auto label = new QLabel(text,btn);
   label->setWordWrap(true);

   auto layout = new QHBoxLayout(btn);
   layout->addWidget(label,0,Qt::AlignCenter);

   return btn;
}
2 голосов
/ 09 марта 2017

Для переноса слов в обычном 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 голосов
/ 23 января 2012

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

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

1 голос
/ 23 января 2012

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

...