Так что я хочу просто увеличить индикатор выполнения с помощью таймера. Но каким-то образом он увеличивает индикатор выполнения больше, чем должен.
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. То же поведение. Так что это не таймер!
Я думаю, что вы не совпадаете со значением 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)
Я прав?
Других решений пока нет …