【问题标题】:Fit QLabel height without WordWrap适合没有 WordWrap 的 QLabel 高度
【发布时间】:2017-12-06 19:39:01
【问题描述】:

我需要手动换行,因为 Qt 的原生 wordWrap 在错误的位置拆分。我已经对我的文本进行了换行,但内容并未显示所有内容。 QLabel 像图片一样切割顶部和底部:

我可以在没有 wordWrap 的情况下将 Qlabel 调整到其中文本的高度吗?

【问题讨论】:

  • 您想使用内部文本自动调整 QLabel 的大小吗?
  • 如果 QLabel 不是布局的一部分,请尝试将其高度设置为 QWidget::heightForWidth 返回的值。
  • @Mohammadreza Panahi 是的,我想要这个。
  • 你能给我几分钟吗?
  • 是的。谢谢大佬

标签: c++ qt word-wrap qstring qlabel


【解决方案1】:

我把它写成height可扩展:

QLabel lbl;
int count = 0;
QString str = "";

// set lbl text 
lbl.setText("hfdsf\ncsad\nfsc\dajkjkjkjhhkdkca\n925");
str = lbl.text();

for(int i = 0;i < str.length();i++)
    if(str.at(i).cell() == '\n')
        count++;

// resize lbl (width and height)
lbl.resize(lbl.fontMetrics().width("this is the max-length line in qlabel")
         , lbl.fontMetrics().height() * (count + 1));

注意:如果您更改QLable 字体facesize,则此工作有效!高度可扩展(在每件事之前将您的QLabel frameShape 设置为BOX)。

如果你想做widthscalable-content,你应该做这些步骤:

  • 逐行读取QLabel(lbl object) 文本
  • 计算每行长度
  • 选择最大行长
  • 使用QLabel::fontMetrics().width(QString str) 调查strwidth 中的大小

希望对你有帮助……

【讨论】:

    【解决方案2】:

    QLabel 如果你把它放在布局中,它应该会自动调整到所需的高度,不管是否启用 wordWrap,请参阅文档: http://doc.qt.io/qt-5/layout.html

    【讨论】:

    • @RafaelUeda 然后你应该检查你的布局,也许是其他小部件的 sizePolicy,因为QLabel 首选大小将始终适合你的整个文本高度(即使是多行)。我强烈反对使用 Mohammadreza Panahi 的解决方案,因为布局允许您以更灵活的方式自动执行此操作,除非您有非常非常具体的用例。玩弄自己的尺寸始终是错误和未来限制的来源,什么时候可以避免它是非常糟糕的主意。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多