【问题标题】:qt5 how to get real width and height of qlabel?qt5如何获得qlabel的真实宽度和高度?
【发布时间】:2021-07-14 23:13:50
【问题描述】:

如何获取 QLabel 的真实宽度和高度?方法 width() 和 height() 总是返回 100 和 30。我想将 QLabel 放在 QPushButton 中,然后将按钮大小调整为标签的内容,但我的代码不起作用。

void MyTranslationButton::setFullTranslation( QString s_en_transl, QString s_ru_transl )
{
    QLabel* label = new QLabel( this );
    label->setText
        ( 
            "<span style=\"font-size: 24px; font-weight: bold;\" >" + s_en_transl + "</span><br/>" + 
            "<span style=\"font-size: 18px;\" ><i>" + s_ru_transl + "</i></span>"
        );
    label->setAttribute( Qt::WA_TransparentForMouseEvents, true );
    label->setAlignment( Qt::AlignCenter | Qt::AlignVCenter );
    
    QGridLayout* layout = new QGridLayout( this );
    this->setMinimumWidth( label->width() );
    this->setMinimumHeight( label->height() );
    this->setLayout( layout );
    this->layout()->addWidget( label );
}

对不起我的英语。

【问题讨论】:

  • 只有当小部件在布局内并且可见时才能知道真正的宽度/高度。在不可能之前。
  • @chehrlic,太难过了
  • @chehrlic 只有当小部件在布局内并且可见时才能知道真正的宽度/高度。 并非完全如此。您可以在调整大小事件中获取小部件的实际大小,即使它不是布局的一部分。
  • @КрошкаРу, QWidget 有一个resizeEvent。重新实现它以了解大小何时以及如何变化。

标签: qt qt5 qlabel


【解决方案1】:

似乎不可能,所以我用 QFontMetrics 计算 QLabel 内容大小。

//Вычислить ширину строки в пикселах
int MyTranslationButton::calcStringPixelWidth( QString s_str, QFont font, int n_font_size )
{
    font.setPointSize( n_font_size );
    QFontMetrics fm( font );
    return fm.width( s_str );
}


//Вычислить высоту строки в пикселах
int MyTranslationButton::calcStringPixelHeight( QFont font, int n_font_size )
{
    font.setPointSize( n_font_size );
    QFontMetrics fm( font );
    return fm.height();
}

【讨论】:

    猜你喜欢
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    相关资源
    最近更新 更多