Russian Qt Forum
Ноябрь 24, 2024, 02:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: как вызывать метод через определённый интервал времени?  (Прочитано 11501 раз)
Sadovnik
Гость
« : Ноябрь 30, 2011, 23:39 »

Здравствуйте!
вопрос немного глупый, но всё же я пока понять не могу.
есть кнопка. При нажатии на неё вызывается метод, 1 раз. Как сделать так, чтобы при нажатии на кнопку этот метод вызывался к примеру каждые 40 мс ?

Код
C++ (Qt)
connect(send, SIGNAL(clicked()), SLOT(sendMessage()));
send - QPushButton
Записан
andrew.k
Гость
« Ответ #1 : Ноябрь 30, 2011, 23:41 »

в слоте кнопки sendMessage() { QTimer::singleShot(40, this, SLOT(doSendMessage() ) ); }

doSendMessage() это слот в котором уже делаешь отправку.
Два слота итого.
« Последнее редактирование: Ноябрь 30, 2011, 23:43 от andrew.k » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #2 : Ноябрь 30, 2011, 23:45 »

в описании QTimer сразу готовый пример есть
в слоте кнопки sendMessage() { QTimer::singleShot(40, this, SLOT(doSendMessage() ) ); }
singleShot, как отражено в названии, вызывает слот лишь раз
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
andrew.k
Гость
« Ответ #3 : Ноябрь 30, 2011, 23:50 »

в описании QTimer сразу готовый пример есть
в слоте кнопки sendMessage() { QTimer::singleShot(40, this, SLOT(doSendMessage() ) ); }
singleShot, как отражено в названии, вызывает слот лишь раз

А тупанул. Я думал надо через сорок миллисекунд вызвать.

Ну тогда вообще в чем проблема. QTimer start/stop когда надо.

Я знаю, что делает singleShot, если че!
Записан
Sadovnik
Гость
« Ответ #4 : Декабрь 01, 2011, 00:02 »


QTimer start/stop когда надо.

а как он работает и куда его запихнуть ?Улыбающийся
Записан
andrew.k
Гость
« Ответ #5 : Декабрь 01, 2011, 00:05 »

http://doc.qt.nokia.com/latest/qtimer.html
Записан
Sadovnik
Гость
« Ответ #6 : Декабрь 01, 2011, 00:25 »

Тоесть
Код:
     QTimer *timer = new QTimer(this);
     connect(timer, SIGNAL(timeout()), this, SLOT(update()));
     timer->start(1000);

чтобы вызывался мой метод через определённый интервал... Блин, я всё равно не понимаю:
я нажимаю на кнопку, вызывается мой метод sendMessage. И в этом методе я должен установить таймер и коннект чтоли  Непонимающий
Записан
andrew.k
Гость
« Ответ #7 : Декабрь 01, 2011, 00:27 »

Таймер создай заранее в конструкторе своего класса. Там же сделай коннект.

в sendMessage просто timer.start(40)

а когда уже не нужно timer.stop();
Записан
Sadovnik
Гость
« Ответ #8 : Декабрь 01, 2011, 00:36 »

разобрался Улыбающийся
спасибо большое!
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #9 : Декабрь 01, 2011, 02:10 »

Код
C++ (Qt)
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(sendMessage()));
timer->setInterval(40);
 
QPushButton *btn = new QPushButton(tr("Send"), this);
connect(btn , SIGNAL(clicked()), timer, SLOT(start()));
« Последнее редактирование: Декабрь 01, 2011, 02:12 от pastor » Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
BuRn
Гость
« Ответ #10 : Декабрь 01, 2011, 03:11 »

Код
C++ (Qt)
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(sendMessage()));
timer->setInterval(40);
 
QPushButton *btn = new QPushButton(tr("Send"), this);
connect(btn , SIGNAL(clicked()), timer, SLOT(start()));
а разве тут не будет проблемы ?
я о том что памяти выделили на 1 таймер, а стартовать его мы будем неизвестно сколько раз, сколько нажмем на кнопку
Записан
thechicho
Гость
« Ответ #11 : Декабрь 01, 2011, 10:35 »

Код
C++ (Qt)
connect(send, SIGNAL(clicked()), SLOT(sendMessage()));
 
void sendMessage()
{
   send message
   ...
   QEventLoop loop;
   QTimer::singleShot(40, &loop, SLOT(quit()));
   loop.exec();
 
   sendMessage();
}
Записан
twp
Гость
« Ответ #12 : Декабрь 01, 2011, 12:35 »

Код
C++ (Qt)
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(sendMessage()));
timer->setInterval(40);
 
QPushButton *btn = new QPushButton(tr("Send"), this);
connect(btn , SIGNAL(clicked()), timer, SLOT(start()));
а разве тут не будет проблемы ?
я о том что памяти выделили на 1 таймер, а стартовать его мы будем неизвестно сколько раз, сколько нажмем на кнопку
не будет
Цитата: Assistant
void QTimer::start () [slot]
Starts or restarts the timer with the timeout specified in interval.
If singleShot is true, the timer will be activated only once.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.131 секунд. Запросов: 23.