Qt Progressbar Увеличивает больше, чем должно

Так что я хочу просто увеличить индикатор выполнения с помощью таймера. Но каким-то образом он увеличивает индикатор выполнения больше, чем должен.

mainwindow.h:

Class MainWindow {
//...
private slots:
//...
void update();
private:
Ui::MainWindow *ui;
QTimer *timer;
unsigned int counter;
};

mainwindow.cpp:

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
timer = new QTimer(this);
counter = 0;
connect(timer, SIGNAL(timeout()), this, SLOT( update() ) );
}

void MainWindow::on_actionStart_triggered()
{
if( ui->txtTime->text().isEmpty() || (ui->txtTime->text().toInt() == 0) )
{
QMessageBox::warning(this, "Error", "Could not start the timer.", QMessageBox::Ok);
return;
}

ui->cmdStart->setEnabled(false);
timer->start(ui->txtTime->text().toInt() * 60000  / 60);
}void MainWindow::update()
{
counter++;
ui->progressBar->setValue( counter ); //Should be incremented by one
if( ui->progressBar->value() == 60 )
{
timer->stop();
Phonon::MediaObject *music = Phonon::createPlayer(Phonon::MusicCategory,
Phonon::MediaSource( ":/Music/" + ui->chkMusic->currentText() ));
music->play();  //Playing music
delete timer;
}
}

В отладчике я заметил, что индикатор выполнения имеет значение 6, в то время как счетчик имеет только значение 4. Также он увеличивает сначала 1, затем 2, затем 2, затем 1, и так далее. Что я делаю неправильно?!

Редактировать:
Я думаю, что это индикатор прогресса. Я изменил действие на это:

void MainWindow::on_actionStart_triggered()
{
if( ui->txtTime->text().isEmpty() || (ui->txtTime->text().toInt() == 0) )
{
QMessageBox::warning(this, "Error", "Could not start the timer.", QMessageBox::Ok);
return;
}

// ui->cmdStart->setEnabled(false);
// ui->progressBar->setMaximum( ui->txtTime->text().toInt() * 60 );
// timer->start( 1000 );
counter++;
ui->progressBar->setValue( counter );
}

Таймер не будет запущен, так как я его закомментировал. Всегда, когда я нажимаю на кнопку действия, он увеличивает индикатор выполнения на 1, затем на 2, затем на 2, а затем на 1. То же поведение. Так что это не таймер!

2

Решение

Я думаю, что вы не совпадаете со значением QProgressBar (целое число между минимальным () и максимальным ()) и отображаемым процентом прогресса, что примерно (значение-мин) / (макс-мин)

пол (1/60 * 100) = 1%

пол (2/60 * 100) = 3%

пол (3/60 * 100) = 5%

пол (4/60 * 100) = 6%

Таким образом, увеличение значения () на 1 увеличивает процент в следующей последовательности: 1%, 2%, 2%, 1% …

Если вы хотите отобразить 60%, когда счетчик достигнет 60, вам нужно setMaximum (100)

Я прав?

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]