【问题标题】:Why does QLabel prematurely wrap?为什么 QLabel 过早换行?
【发布时间】:2012-12-21 18:56:45
【问题描述】:

在下面的代码中,显然有足够的空间让标签放在一行上,但由于某种原因,它在“thats”之后将它分成了两行。为什么以及如何防止这种情况发生?

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    this->setFixedSize(250,100);

    QLabel *label = new QLabel;
    label->setStyleSheet("background-color:blue");
    label->setWordWrap(true);
    label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    label->setText("Oh my gosh thats too funny!");
    label->setParent(this);

}

再次为清楚起见,它显示:

哦,天哪,就是这样
太搞笑了!

我想要:

天哪,这太有趣了!

【问题讨论】:

  • 不应该是label->setWordWrap(false);吗???如果这不是一个错字,那么我想你有一个答案。来自 Qt 文档:“如果此属性为真,则标签文本会在必要时在分词处换行;否则根本不换行。”
  • @doc 问题出在:“必要时”。这是在必要之前进行包装。
  • 如果您希望您的 QLabel 适合父小部件的大小,您应该使用布局。 QVBoxLayout * layout = new QVBoxLayout; layout->addWidget(label); this->setLayout(layout);。 QWidget 不会自行重新定位和调整其子小部件的大小。
  • @doc 我认为这就是答案。

标签: c++ qt


【解决方案1】:

您是否在 Widget 中使用任何布局?如果不尝试手动设置 QLabels 的宽度和高度

编辑:

我写了一个没有使用任何QLayout的代码,它工作得很好,很简单

QLabel *label= new QLabel(QString::fromUtf8("Client code"), this);
label->setGeometry(posx, posy, w, h);

希望对你有帮助

PS: 'this' 是我的对话框

class MyDialog : public QDialog 

【讨论】:

  • 问题在于有/没有布局(我都试过了)。但是,您是对的,如果我手动设置高度,那么它将适合一行,但我也有以下问题:stackoverflow.com/questions/13994902/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-31
  • 1970-01-01
  • 2011-08-03
  • 2010-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多