2011-12-15 14 views
6

Eh ben ancak ben bir şey yapmamanızı, yüzde indirme hızını gösterir nerede ayarlamak istediğiniz, ben indirme ilerlemesini göstermek bir QProgressBar vardır:değiştirme metni

Yüzde% (downloadspeed KB/sn)

Herhangi bir fikrin var mı? QProgressBar metnini görünür yapmadan

cevap

18

yapın.

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

Sen indirme hızını kendiniz hesaplayabilirsiniz indirme ilerleme

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

Sanırım kendimi yanlış anlattım (eğer öyleyse, üzgünüm.) Çubuğa daha fazla metin eklemek istiyorum. Sadece yüzdesini gösterdiğinden. – Kazuma

+1

edited ......... –

+0

QProgressbar'da Mac-OSX metni üzerinde imkansız görünüyor. – TimZaman

5

göstermek için, bu haliyle, bir dize oluşturmak:

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

Bunu her zaman yapmak gerekir senin Ancak indirme hızının güncellenmesi gerekiyor.

2

QProgressBar for Macintosh StyleSheet format özelliğini desteklemediğinden, çapraz platform desteğini yapmak için QLabel ile ikinci bir katman ekleyebilirsiniz.

// 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

Kodu biraz daha açıklayabilir misiniz? Bunu Python'da uygulamaya çalışıyorum ve C++'m biraz paslı! Teşekkürler! –