LINUX.ORG.RU

[Qt][Qt-creator]Постоянная посылка команд

 


0

1

Есть несколько кнопок на формочке. По клику на кнопку «посылается команда». Так вот надо сделать чтобы при клике на кнопку эта команда посылалась раз в секунду. При клике на другую кнопку другая команда тоже посылалась раз в секунду.

У меня проблема с алгоритмом.

★★★★★

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

QTimer, вроде.

name_no ★★
()
Ответ на: комментарий от shylent

Да, я пытаюсь использовать QTimer, но как то неправильно, сделал их 4 штуки и пытался включать и выключать в соответствующих процедурах.

sniper21 ★★★★★
() автор топика
Ответ на: комментарий от sniper21

В чем проблема? В в обработчике проверяете `isActive()' и делаете start(1000) или stop(), соответственно. По одному объекту QTimer на каждую «кнопку».

shylent
()
Ответ на: комментарий от shylent

не понимаю. Кнопка с функцией у меня связана при помощи connect

QObject::connect(ui->btn, SIGNAL(clicked()), this, SLOT(value_change()));

в функции value_change() что-то ничего не напишется, если по уму... только разве что кнопку cliced связать как нибудь еще и с таймером?

sniper21 ★★★★★
() автор топика
Ответ на: комментарий от sniper21

Чего-то многовато, судя по описанию, тебе всего один нужен. Хотя, ты ж меня всё равно игноришь )))

name_no ★★
()
Ответ на: комментарий от sniper21

> только разве что кнопку cliced связать как нибудь еще и с таймером?

connect(ui->button1, SIGNAL(clicked()), &m_timer1, SLOT(start()));
connect(&m_timer1, SIGNAL(timeout()), this, SLOT(slotTimeout1()));
...
arsi ★★★★★
()
Ответ на: комментарий от shylent

одного таймера хватит
иначе придётся для каждой кнопки делать остановку всех таймеров
а тут всего один stop, один connect и один start(1000)

TERRANZ ★★★★
()
Ответ на: комментарий от TERRANZ

Ну, значит я неправильно распарсил вопрос ТС - бывает.

shylent
()
Ответ на: комментарий от TERRANZ

где? куда? как? хватит одного таймера, можно по подробнее?

sniper21 ★★★★★
() автор топика
Ответ на: комментарий от TERRANZ

>иначе придётся для каждой кнопки делать остановку всех таймеров

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

sniper21 ★★★★★
() автор топика
Ответ на: комментарий от sniper21

> в функции value_change() что-то ничего не напишется, если по уму... только разве что кнопку cliced связать как нибудь еще и с таймером?

научись мысли выражать, а то это просто поток сознания какой-то

dt1 ★★
()
Ответ на: комментарий от dt1

кликнули на кнопку 1 и раз в секунду выполняется функция value_change1(). Если кликнули на кнопку 2, то раз в секунду начинает выполняться value_change2() при этом выполнение value_change1() останавливается и.т.д.

sniper21 ★★★★★
() автор топика
Ответ на: комментарий от sniper21

> кликнули на кнопку 1 и раз в секунду выполняется функция value_change1(). Если кликнули на кнопку 2, то раз в секунду начинает выполняться value_change2() при этом выполнение value_change1() останавливается и.т.д.

void on_pushButton1_clicked() { m_current_action = 1; }
void on_pushButton2_clicked() { m_current_action = 2; }
void on_pushButton3_clicked() { m_current_action = 3; }
void on_pushButton4_clicked() { m_current_action = 4; }

void on_timer1_timeout() {
	switch(m_current_action) {
		case 1: value_change1(); break;
		case 2: value_change2(); break;
		case 3: value_change3(); break;
		case 4: value_change4(); break;
	}
}
arsi ★★★★★
()
Ответ на: комментарий от sniper21

connect(ui->button1, SIGNAL(clicked()), this, SLOT(button1_click()));

в обработке кнопки
void MainForm::button1_click()
{
...

m_timer1->stop();
connect(&m_timer1, SIGNAL(timeout()), this, SLOT(button1_click_real()));
m_time1->start(1000);
button1_click_real();
}

void MainForm::button1_click_real()
{
...
//твой код кнопки тут
}

TERRANZ ★★★★
()
Ответ на: комментарий от sniper21

> А как это соединить кнопки и value_change+n; n=n+1 при помощи функции connect?

при помощи таймера. это же видно с примера.

arsi ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.