有没有办法在像QPushButton这样的简单小部件上启用文本自动换行?

时间:2012-01-23 08:57:07

标签: qt word-wrap

我想让QPushButton自动换行并展开它的高度,而不是扩展宽度。我怎么能这样做?

6 个答案:

答案 0 :(得分:5)

使用QToolButton而不是QPushButton。 QToolButton可以使用多行文本,QToolButton的大小比QPushButton的大小更容易控制。

答案 1 :(得分:2)

你可能做错了什么。按钮不应该包含太多文本,而是描述要采取的动作的几个词。如果您希望将其设置为多行,则最好考虑提供具有相应描述的QLabel。

无论如何,我不知道任何[Qt支持]的方式来做到这一点。例如,QHeaderView标题存在同样的问题,它可能更加适用。手动,你总是可以通过在标题字符串中添加"\n"个字符来实现这一点(你可以肯定自动化)。

答案 2 :(得分: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());
}

请参阅Qt文档中有关QProxyStyle类的其他信息。

答案 3 :(得分:2)

我已经通过以下方式解决了自动换行问题:

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

答案 4 :(得分:1)

在SVG图形上有一些solution使用绘画文本。检查一下。

答案 5 :(得分:0)

一种直接的解决方案是在QPushButton内编写文本时插入换行符,就像

This button has \n a long text

如果您在QtDesigner中进行挖掘,则只需右键单击该按钮,然后单击“插入换行符”即可。