我想让QPushButton
自动换行并展开它的高度,而不是扩展宽度。我怎么能这样做?
答案 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中进行挖掘,则只需右键单击该按钮,然后单击“插入换行符”即可。