2016-09-22 16 views
0

Я новичок с Qt (с использованием Qt Creator) и QProgressBar. Мне интересно узнать, как иметь фиксированное текстовое значение (а не значение индикатора выполнения) внутри или рядом с левом от QProgressBar и иметь размер шрифта в соответствии с размером индикатора выполнения.Исправлен текст внутри или рядом с QProgressBar с масштабированием размера шрифта в Qt

Например:

inside

или

adjacent

Я рассматривал возможность использования QLabel, но не удалось, и я не смог найти примеры в Интернете.

Любой образец кода, иллюстрирующий решение для меня, чтобы понять и учиться, будет очень ценным.

ответ

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"