如何根据文本的大小设置 QLabel 的大小?
How to set QLabel size according to the size of its text?
我希望 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
被声明为 class 成员。
我尝试了 link 中的建议:
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());
这导致标签对于文本来说太小了。部分文字被隐藏。
以下对我有用:
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
我希望 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
被声明为 class 成员。
我尝试了 link 中的建议:
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());
这导致标签对于文本来说太小了。部分文字被隐藏。
以下对我有用:
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