Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2011, 12:02   #1
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию QT: Таймер

Как сделать, чтобы при нажатии на некоторую кнопку значение doubleSpinBox изменялось, например, от 3 до 0, с некоторым шагом, по прошествии пропорционального интервала времени? Столько параллельных операторов, а как делать последовательные циклы, так и не понял.
Писал while (...) {double--; QTimer}. Может есть какой-то готовый пример?
Схожая вещь тут: http://developer.qt.nokia.com/doc/qt...findfiles.html, но здесь не используется именно временной шаг. Как проще сделать?
Krasi вне форума Ответить с цитированием
Старый 10.11.2011, 12:49   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

connect для QTimer
start(time) для QTimer

в функции приконекченной изменяйте значение
p51x вне форума Ответить с цитированием
Старый 10.11.2011, 15:15   #3
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

А так я тоже пробовал.
Код:
QTimer *timer = new QTimer(this);
            connect(timer, SIGNAL(timeout()), this, SLOT(dec()));
            timer->start(3000);
Код:
void MainWindow::dec()
{ui->doubleSpinBox->setValue(ui->doubleSpinBox->value()-0.1);}
По истечении 3 секунд меняет 3.0 на 2.9, что понятно, вроде. Но что тогда исправить?
Krasi вне форума Ответить с цитированием
Старый 10.11.2011, 19:22   #4
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

Вот такое не правильно время показывает.
Код:
QTimer *timer = new QTimer(this);
            connect(timer, SIGNAL(timeout()), this, SLOT(dec()));
            timer->start(1);
            qApp->processEvents();
Код:
void MainWindow::dec()
{pr=pr-1; //pr=3000
    ui->doubleSpinBox->setValue(pr/1000);
   if (ui->doubleSpinBox->value()==0.0)
       ui->doubleSpinBox->setValue(3.0);
//stopRecording();
}
Почему-то идет все значительно медленнее, чем в секундах.

Последний раз редактировалось Krasi; 10.11.2011 в 19:25.
Krasi вне форума Ответить с цитированием
Старый 10.11.2011, 19:59   #5
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

И более серьезная проблема.
Код:
if (ui->doubleSpinBox->value()==0.0){
        stopRecording();}
Если ставлю это в функцию dec(), программа неожиданно завершается.
Krasi вне форума Ответить с цитированием
Старый 12.11.2011, 08:15   #6
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

Так и не получается сделать. Либо функция делает stoprecording сразу же, либо программа виснет.
Krasi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таймер SashaKrugliak Помощь студентам 3 24.10.2011 08:13
Таймер Sheva144 C++ Builder 2 19.04.2011 18:24
таймер в C# Munky Помощь студентам 2 15.04.2010 20:30
Таймер Михаил Юрьевич Общие вопросы Delphi 1 16.07.2008 08:46
Таймер в С# kommunist Общие вопросы .NET 3 02.06.2008 12:11