2011-12-15 7 views
6

그럼 내가 그러나 내가 그것을로 떠나는 비율을 다운로드 속도를 도시 설정하려면, 내가 다운로드 진행 상황을 보여 QProgressBar 있습니다변경 텍스트

백분율 % (downloadspeed KB/s의)

아이디어가 있으십니까?

답변

18

QProgressBar 텍스트를 표시합니다.

QProgressBar *progBar = new QProgressBar(); 
progBar->setTextVisible(true); 

당신은 다운로드 속도를 직접 계산할 수있는 다운로드 진행

void Widget::setProgress(int downloadedSize, int totalSize) 
{ 
    double downloaded_Size = (double)downloadedSize; 
    double total_Size = (double)totalSize; 
    double progress = (downloaded_Size/total_Size) * 100; 
    progBar->setValue(progress); 

    // ****************************************************************** 
    progBar->setFormat("Your text here. "+QString::number(progress)+"%"); 
} 
+0

제가 잘못 생각했다고 생각합니다. 그렇다면 죄송합니다. 바에 더 많은 텍스트를 추가하고 싶습니다. 이후에는 비율 만 표시됩니다. – Kazuma

+1

편집 됨 ......... –

+0

QProgressbar의 Mac OSX 텍스트가 불가능 해 보입니다. – TimZaman

5

을 표시하고 따라서 문자열을 만들 :

QString text = QString("%p% (%1 KB/s)").arg(speedInKbps); 
progressBar->setFormat(text); 

당신은이 모든 시간을 수행해야합니다 당신의 그러나 다운로드 속도를 업데이트해야합니다.

2

Macintosh 용 StyleSheet 용 QProgressBar가 형식 속성을 지원하지 않으므로 크로스 플랫폼 지원으로 인해 QLabel과 함께 두 번째 레이어를 추가 할 수 있습니다.

// init progress text label 
    if (progressBar->isTextVisible()) 
    { 
     progressBar->setTextVisible(false); // prevent dublicate 

     QHBoxLayout *layout = new QHBoxLayout(progressBar); 
     QLabel *overlay = new QLabel(); 
     overlay->setAlignment(Qt::AlignCenter); 
     overlay->setText(""); 
     layout->addWidget(overlay); 
     layout->setContentsMargins(0,0,0,0); 

     connect(progressBar, SIGNAL(valueChanged(int)), this, SLOT(progressLabelUpdate())); 
    } 

void MainWindow::progressLabelUpdate() 
{ 
    if (QProgressBar* progressBar = qobject_cast<QProgressBar*>(sender())) 
    { 
     QString text = progressBar->format(); 
     int precent = 0; 
     if (progressBar->maximum()>0) 
      precent = 100 * progressBar->value()/progressBar->maximum(); 
     text.replace("%p", QString::number(precent)); 
     text.replace("%v", QString::number(progressBar->value())); 
     QLabel *label = progressBar->findChild<QLabel *>(); 
     if (label) 
      label->setText(text); 
    } 
} 
+0

코드를 조금 더 설명 할 수 있습니까? 이걸 파이썬으로 구현하려고하는데 C++은 녹슬 었어. 감사! –