修复了 QProgressBar 内部或附近的文本,在 Qt 中缩放字体大小
Fixed text inside or adjacent to QProgressBar with scaling font size in Qt
我是 Qt
(使用 Qt Creator)和 QProgressBar
的新手。我有兴趣学习如何在 QProgressBar
的内部或左侧设置一个固定的文本值(不是进度条的值),并根据进度条的大小调整其字体大小。
例如:
或
我考虑过使用 QLabel
但失败了,我在网上找不到任何示例。
任何说明解决方案以供我理解和学习的代码示例将不胜感激。
如果进度条内的标签可以,那么这里是一个例子。这可能不是你想要的,但它应该会把你带到正确的方向。我在调整大小事件中调整了字体大小。在这个例子中,字体大小是根据标签的大小计算的,它与进度条的大小相同。
#include <QApplication>
#include <QProgressBar>
#include <QWidget>
#include <QLabel>
#include <QLayout>
#include <QTimer>
class Widget : public QWidget
{
Q_OBJECT
QProgressBar progressBar;
QLabel *label;
public:
Widget(QWidget *parent = nullptr) : QWidget(parent)
{
progressBar.setRange(0, 100);
progressBar.setValue(20);
progressBar.setTextVisible(false);
progressBar.setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum);
label = new QLabel(&progressBar);
label->setText("Hello World!");
setLayout(new QHBoxLayout);
layout()->addWidget(&progressBar);
}
protected:
void resizeEvent(QResizeEvent *)
{
label->resize(progressBar.size());
QFontMetrics fm(label->font());
float multiplier_horizontal = (float)label->width() / fm.width(label->text());
float multiplier_vertical = (float)label->height() / fm.height();
QFont font = label->font();
font.setPointSize(font.pointSize() * qMin(multiplier_horizontal, multiplier_vertical));
label->setFont(font);
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
#include "main.moc"
我是 Qt
(使用 Qt Creator)和 QProgressBar
的新手。我有兴趣学习如何在 QProgressBar
的内部或左侧设置一个固定的文本值(不是进度条的值),并根据进度条的大小调整其字体大小。
例如:
或
我考虑过使用 QLabel
但失败了,我在网上找不到任何示例。
任何说明解决方案以供我理解和学习的代码示例将不胜感激。
如果进度条内的标签可以,那么这里是一个例子。这可能不是你想要的,但它应该会把你带到正确的方向。我在调整大小事件中调整了字体大小。在这个例子中,字体大小是根据标签的大小计算的,它与进度条的大小相同。
#include <QApplication>
#include <QProgressBar>
#include <QWidget>
#include <QLabel>
#include <QLayout>
#include <QTimer>
class Widget : public QWidget
{
Q_OBJECT
QProgressBar progressBar;
QLabel *label;
public:
Widget(QWidget *parent = nullptr) : QWidget(parent)
{
progressBar.setRange(0, 100);
progressBar.setValue(20);
progressBar.setTextVisible(false);
progressBar.setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum);
label = new QLabel(&progressBar);
label->setText("Hello World!");
setLayout(new QHBoxLayout);
layout()->addWidget(&progressBar);
}
protected:
void resizeEvent(QResizeEvent *)
{
label->resize(progressBar.size());
QFontMetrics fm(label->font());
float multiplier_horizontal = (float)label->width() / fm.width(label->text());
float multiplier_vertical = (float)label->height() / fm.height();
QFont font = label->font();
font.setPointSize(font.pointSize() * qMin(multiplier_horizontal, multiplier_vertical));
label->setFont(font);
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
#include "main.moc"