crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Изменение значения интервала QTimer с помощью doubleSpinBox
zuze
  опции профиля:
сообщение 14.1.2013, 14:21
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


У меня в конструкторе описано так


ui->doubleSpinBox->setMinimum(0.9);
ui->doubleSpinBox->setMaximum(10);
ui->doubleSpinBox->setSingleStep(0.1);


Когда я запускал таймер со статическим значением при нажатию на кнопку, то было всё впорядке.
Допустим в функции-слоте, пишу

timer->start(3000);


Если я ввожу в функции слоте в место прошлой строки такой код

ui->doubleSpinBox->setValue(ui->dubleSpinBox->Value());
timer->start(ui->doubleSpinBox->Value()*1000);


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

Как сделать так, чтобы при изменении значения dubleSpinBox значение timer->start(<значение>) тоже менялось?

Сообщение отредактировал zuze - 14.1.2013, 15:36
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 14.1.2013, 15:58
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Я попытался сделать, так:

В конструктор добавил

connect(ui->doubleSpinBox, SIGNAL(valueChanged(double)), this, SLOT(setValue(value)));


В функции-слоте нажатия на кнопку я пишу

timer->start(ui->doubleSpinBox->value()*1000);


void l::setValue(double value)
{
     ui->doubleSpinBox->setValue(value);
}


public slots:
       void setValue(double value);


Но значение по нажатию на doubleSpinBox не передаётся таймеру. Что я сделал не так?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 14.1.2013, 20:28
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Задача решена.

Добавил в описание класса

signals:
     void valueChanged(double value);



А в место этого


void l::setValue(double value)
{
     ui->doubleSpinBox->setValue(value);
     timer->start(value*1000);
}


Я написал


void l::setValue(double value)
{
     ui->doubleSpinBox->setValue(value);
     timer->start(value*1000);
     emit valueChanged(value);
}



Единственный маленький вопросик в данном случае таймер запускается как я только нажму doubleSpinBox, а doubleSpinBox стоит на минимальном значении 0.9. То есть когда я нажму таймер заработает со значения 1.0. А мне надо что бы сначала таймер запускался со значения 0.9.

Я это представлял так, нажимаю кнопку и таймер запускается со значением 0.9, а вот дальше я это значение могу менять с помощью виджета doubleSpinBox. Но вот как сделать это не пойму. Подскажите пожалуйста?

Вопросик снят. Добавил функцию-слот для кнопки строчку

timer->start(ui->doubleSpinBox->value()*1000);


Сообщение отредактировал zuze - 14.1.2013, 22:02
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 14.1.2013, 22:07
Сообщение #4


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


так в конструкторе и запусти после

ui->doubleSpinBox->setMinimum(0.9);

Сообщение отредактировал Алексей1153 - 14.1.2013, 22:07
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 20:23