我使用
QProgressBar
来显示下载操作的进度。我想在显示的百分比上添加一些文本,例如:
10% (下载速度 kB/s)
有什么想法吗?
QProgressBar
来显示下载操作的进度。我想在显示的百分比上添加一些文本,例如:
10% (下载速度 kB/s)
有什么想法吗?
使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)+"%");
}
QString text = QString( "%p% (%1 KB/s)" ).arg( speedInKbps );
progressBar->setFormat( text );
我知道现在已经很晚了,但以防后人需要。从PyQT4.2开始,你可以直接使用setFormat方法。例如,要让它显示maxValue的currentValue (0 of 4),只需要这样:
yourprogressbar.setFormat("%v of %m")
由于Macintosh StyleSheet的QProgressBar不支持format属性,为了实现跨平台支持,可以添加一个带有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);
}
}
QMacStyle
。避免我为了显示标签而苦恼。 - swdevprogBar->setFormat("Your text here. "+QString::number(progress)+"%");
可以被替换为progBar->setFormat("Your text here. %p%");
因为 setFormat() 接受某种格式,其中 %p 是当前百分比,**%v** 是当前值,**%m** 是当前步数。 - IGR94