Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Sadovnik от Ноябрь 30, 2011, 23:39



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

Код
C++ (Qt)
connect(send, SIGNAL(clicked()), SLOT(sendMessage()));
send - QPushButton


Название: Re: как вызывать метод через определённый интервал времени?
Отправлено: andrew.k от Ноябрь 30, 2011, 23:41
в слоте кнопки sendMessage() { QTimer::singleShot(40, this, SLOT(doSendMessage() ) ); }

doSendMessage() это слот в котором уже делаешь отправку.
Два слота итого.


Название: Re: как вызывать метод через определённый интервал времени?
Отправлено: kambala от Ноябрь 30, 2011, 23:45
в описании QTimer сразу готовый пример есть
в слоте кнопки sendMessage() { QTimer::singleShot(40, this, SLOT(doSendMessage() ) ); }
singleShot, как отражено в названии, вызывает слот лишь раз


Название: Re: как вызывать метод через определённый интервал времени?
Отправлено: andrew.k от Ноябрь 30, 2011, 23:50
в описании QTimer сразу готовый пример есть
в слоте кнопки sendMessage() { QTimer::singleShot(40, this, SLOT(doSendMessage() ) ); }
singleShot, как отражено в названии, вызывает слот лишь раз

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

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

Я знаю, что делает singleShot, если че!


Название: Re: как вызывать метод через определённый интервал времени?
Отправлено: Sadovnik от Декабрь 01, 2011, 00:02

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

а как он работает и куда его запихнуть ?:)


Название: Re: как вызывать метод через определённый интервал времени?
Отправлено: andrew.k от Декабрь 01, 2011, 00:05
http://doc.qt.nokia.com/latest/qtimer.html


Название: Re: как вызывать метод через определённый интервал времени?
Отправлено: Sadovnik от Декабрь 01, 2011, 00:25
Тоесть
Код:
     QTimer *timer = new QTimer(this);
     connect(timer, SIGNAL(timeout()), this, SLOT(update()));
     timer->start(1000);

чтобы вызывался мой метод через определённый интервал... Блин, я всё равно не понимаю:
я нажимаю на кнопку, вызывается мой метод sendMessage. И в этом методе я должен установить таймер и коннект чтоли  ???


Название: Re: как вызывать метод через определённый интервал времени?
Отправлено: andrew.k от Декабрь 01, 2011, 00:27
Таймер создай заранее в конструкторе своего класса. Там же сделай коннект.

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

а когда уже не нужно timer.stop();


Название: Re: как вызывать метод через определённый интервал времени?
Отправлено: Sadovnik от Декабрь 01, 2011, 00:36
разобрался :)
спасибо большое!


Название: Re: как вызывать метод через определённый интервал времени?
Отправлено: pastor от Декабрь 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()));


Название: Re: как вызывать метод через определённый интервал времени?
Отправлено: BuRn от Декабрь 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 таймер, а стартовать его мы будем неизвестно сколько раз, сколько нажмем на кнопку


Название: Re: как вызывать метод через определённый интервал времени?
Отправлено: thechicho от Декабрь 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();
}


Название: Re: как вызывать метод через определённый интервал времени?
Отправлено: twp от Декабрь 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.