Aquarius_Girl
Aquarius_Girl

Reputation: 22906

How to set QLabel size according to the size of its text?

I want the QLabel to take the size of the text. Following doesn't work. It has made QLabel quite big by default.

.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QLabel>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    QLabel m_QLabel_choose_interval;

};

#endif // MAINWINDOW_H

.cpp

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    m_QLabel_choose_interval.setParent (this);
    m_QLabel_choose_interval.setText ("Choose interval:");
    m_QLabel_choose_interval.setFrameStyle (QFrame::Panel | QFrame::Sunken);
    m_QLabel_choose_interval.setAlignment (Qt::AlignCenter);
}

m_QLabel_choose_interval is declared as a class member.


I tried what's suggested in this link: Dynamic text size QLabel

    r = m_QLabel_choose_interval.fontMetrics().boundingRect("My text");

    m_QLabel_choose_interval.setText ("Choose interval:");
    m_QLabel_choose_interval.setFrameStyle (QFrame::Panel | QFrame::Sunken);
    m_QLabel_choose_interval.setAlignment (Qt::AlignCenter);
    m_QLabel_choose_interval.setFixedWidth (r.width());
    m_QLabel_choose_interval.setFixedHeight (r.height());

This resulted in the label being too small for the text. Part of the text was hidden.

Upvotes: 1

Views: 6411

Answers (1)

Aquarius_Girl
Aquarius_Girl

Reputation: 22906

Following worked for me:

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)   
{  
     m_QLabel_choose_interval.setParent (this);  
     m_QLabel_choose_interval.setText ("Choose interval:");  

     QFont        l_QFont_choose_interval ("times", 24);  
     QFontMetrics l_QFontMetrics_choose_interval (l_QFont_choose_interval);

     m_QLabel_choose_interval.setFont (l_QFont_choose_interval);

     int pixelsWide = l_QFontMetrics_choose_interval.width(m_QLabel_choose_interval.text ());  
     int pixelsHigh = l_QFontMetrics_choose_interval.height();

     m_QLabel_choose_interval.setFrameStyle (QFrame::Panel | QFrame::Sunken);  
     m_QLabel_choose_interval.setAlignment (Qt::AlignCenter);  

     m_QLabel_choose_interval.setFixedWidth (pixelsWide);  
     m_QLabel_choose_interval.setFixedHeight (pixelsHigh);   
}

http://doc.qt.io/qt-5/qfontmetrics.html

enter image description here

Upvotes: 4

Related Questions