Beh ho un QProgressBar dove mostro l'avanzamento del download, però voglio impostare dove si mostra la percentuale della velocità di download, lasciandolo come:Modifica testo nel QProgressBar
Percentuale% (downloadspeed KB/s)
Qualche idea?
Beh ho un QProgressBar dove mostro l'avanzamento del download, però voglio impostare dove si mostra la percentuale della velocità di download, lasciandolo come:Modifica testo nel QProgressBar
Percentuale% (downloadspeed KB/s)
Qualche idea?
rendere visibile il testo QProgressBar.
QProgressBar *progBar = new QProgressBar();
progBar->setTextVisible(true);
per mostrare l'avanzamento del download
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)+"%");
}
Si potrebbe calcolare la velocità di download da soli, quindi creare una stringa così:
QString text = QString("%p% (%1 KB/s)").arg(speedInKbps);
progressBar->setFormat(text);
avrete bisogno di farlo ogni volta che il vostro la velocità di download deve essere aggiornata, tuttavia.
Poiché QProgressBar per Macintosh StyleSheet non supporta la proprietà format, quindi il supporto multipiattaforma da rendere, è possibile aggiungere un secondo layer con 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);
}
}
Puoi spiegare un po 'di più il codice? Sto cercando di implementarlo in Python e il mio C++ è un po 'arrugginito! Grazie! –
Penso di aver spiegato male (Se è così, mi spiace) voglio aggiungere altro testo alla barra. Dal momento che mostra solo la percentuale. – Kazuma
modificato ......... –
Su un testo Mac-OSX su una QProgressbar sembra impossibile. – TimZaman