0

我是新手Qt(使用 Qt Creator)和QProgressBar. 我有兴趣学习如何在 a 的左侧或附近有一个固定的文本值(不是进度条的值),QProgressBar并根据进度条的大小调整其字体大小。

例如:

里面

或者

邻近的

我曾考虑使用 aQLabel但失败了,我在网上找不到任何示例。

任何说明我理解和学习的解决方案的代码示例将不胜感激。

4

1 回答 1

1

如果进度条内的标签可以,那么这里是一个例子。这可能不是您想要的,但它应该会引导您朝着正确的方向前进。我在调整大小事件中调整字体大小。在此示例中,字体大小是根据标签的大小计算的,标签的大小与进度条的大小相同。

#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"
于 2016-09-22T13:09:03.783 回答