2016-09-22 18 views
0

Qt (Qt Creator 사용) 및 QProgressBar을 사용하는 것이 좋습니다. 나는 QProgressBar의 왼쪽 안쪽이나 인접한 고정 된 텍스트 값 (진행률 막대의 값이 아님)을 얻는 방법을 배우고 진행률 막대의 크기에 따라 글꼴 크기를 조정하는 방법에 관심이 있습니다. 예를 들어Qt에서 글꼴 크기를 조절하여 QProgressBar 내부 또는 인접한 고정 텍스트

:

inside

또는

adjacent

는 I는 QLabel를 사용하여 고려하지만 한 실패 나는 온라인 예제를 찾을 수 없습니다.

나를 이해하고 배우기위한 해결책을 보여주는 코드 샘플을 보내 주시면 감사하겠습니다.

답변

1

진행 표시 줄 안의 레이블이 수행하는 경우 다음은 예제입니다. 이것은 정확히 원하는 것이 아니지만 올바른 방향으로 보내야합니다. resize 이벤트에서 글꼴 크기를 조정합니다. 이 예제에서 글꼴 크기는 진행률 표시 줄과 동일한 크기의 레이블 크기를 기반으로 계산됩니다.

#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"