【问题标题】:How to set QLabel size according to the size of its text?如何根据其文本的大小设置 QLabel 大小?
【发布时间】:2017-05-11 08:08:22
【问题描述】:

我希望 QLabel 采用文本的大小。 跟随不起作用。默认情况下,它使 QLabel 变得相当大。

.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 被声明为类成员。


我尝试了此链接中的建议: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());

这导致标签对于文本来说太小了。部分文字被隐藏了。

【问题讨论】:

  • 如果你想让小部件自动管理空间,你应该使用布局来排列它们。

标签: c++ qt qlabel


【解决方案1】:

以下对我有用:

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

【讨论】:

  • 这似乎有点尴尬,因为它涉及到很多代码。我认为正确的解决方案是使用布局。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-05
  • 1970-01-01
  • 2016-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-17
相关资源
最近更新 更多