Название: QEvent Отправлено: demaker от Май 22, 2012, 14:13 Не могли бы объяснить в чем ошибка?
Есть форма TForm. На форме есть кнопка Start. При нажатии на кнопку создается форма, на которой есть progressBar и объект потока TThread, а в нем таймер и по timeout() progressBar увеличивается. Хочу по нажатию кнопки остановить один из потоков. void TForm::stopThread(QKeyEvent* event) { if( event->key() == Qt::Key_F1) { m_threadform[0]->thread->quit(); m_threadform[0]->thread->wait(); event->accept(); } } но ничего не выходит. Даже на мнажатие не реагирует. Не могли бы подсказать почему??? ??? Спасибо! Название: Re: QEvent Отправлено: mutineer от Май 22, 2012, 14:21 что за метод stopThread и почему в него QKeyEvent должны приходить?
Название: Re: QEvent Отправлено: demaker от Май 22, 2012, 14:30 Это обработчик события
сlass TForm : public QWidget { Q_OBJECT public: QList<ThreadForm*> m_threadform; public: TForm(QWidget *parent = 0); ~TForm(); protected: void closeEvent(QCloseEvent* event); void stopThread(QKeyEvent* event); private: Ui::TFormClass ui; ... }; Название: Re: QEvent Отправлено: demaker от Май 22, 2012, 14:32 А QKeyEvent Так как мы обрабатываем событие по нажатию кнопки. :)
Название: Re: QEvent Отправлено: mutineer от Май 22, 2012, 14:34 Я догадался что это обработчик события... Он зарегистрирован как обработчик? Почему система должна вызвать именно этот метод?
Название: Re: QEvent Отправлено: DmitryM от Май 22, 2012, 14:39 Вот эти переопределяемые методы для чего присутствуют?
Код: virtual bool event ( QEvent * event ) Название: Re: QEvent Отправлено: Bepec от Май 22, 2012, 14:40 Сейчас у вас есть просто метод класса StopThread, который у вас в программе не вызывается. Угум?
Название: Re: QEvent Отправлено: demaker от Май 22, 2012, 14:41 А что значит зарегистрирован ???
Обработчик события это же - метод, которому в качестве параметра передается указатель на объет описывающий событие. Название: Re: QEvent Отправлено: mutineer от Май 22, 2012, 14:42 А что значит зарегистрирован ??? Обработчик события это же - метод, которому в качестве параметра передается указатель на объет описывающий событие. Но система ведь должна как-то узнать что нужно вызывать именно этот метод, а не какой-нить другой. Тебе привели три метода, переопределяешь нужный и он будет вызываться Название: Re: QEvent Отправлено: demaker от Май 22, 2012, 14:42 Сейчас у вас есть просто метод класса StopThread, который у вас в программе не вызывается. Угум? Да Название: Re: QEvent Отправлено: demaker от Май 22, 2012, 14:44 А что значит зарегистрирован ??? Обработчик события это же - метод, которому в качестве параметра передается указатель на объет описывающий событие. Но система ведь должна как-то узнать что нужно вызывать именно этот метод, а не какой-нить другой. Тебе привели три метода, переопределяешь нужный и он будет вызываться Понял. А так никак нельзя оставить? Название: Re: QEvent Отправлено: mutineer от Май 22, 2012, 14:45 Понял. А так никак нельзя оставить? Так - это не менять код? можно, но работать не будет Название: Re: QEvent Отправлено: demaker от Май 22, 2012, 14:47 Ум ???
Я поменял void TForm::keyPressEvent(QKeyEvent* event) { if( event->key() == Qt::Key_F1) { m_threadform[0]->thread->quit(); m_threadform[0]->thread->wait(); event->accept(); } } но, что-то тоже не работает Название: Re: QEvent Отправлено: demaker от Май 22, 2012, 14:50 Извините :)
Все заработало :) Спасибо за разъяснения!!! Название: Re: QEvent Отправлено: Bepec от Май 22, 2012, 14:51 А счас у вас уже переопределённый метод по поимке злостных клавиш(?).
PS в названии темы припишите [РЕШЕНО] Название: Re: QEvent Отправлено: demaker от Май 22, 2012, 15:17 Ок понял.
Еще вопросик :) Допустим, я в обработчики событий сделал так void ThreadForm::keyPressEvent(QKeyEvent* event) { if( event->key() == Qt::Key_Alt) { thread->quit(); thread->wait(); event->accept(); } } и хочу по ресайзу вновь запустить нитку. Мне надо заново создавать нитку или просто сделать thread->start(); ? Спасибо!!! Название: Re: QEvent Отправлено: Alex_C от Май 22, 2012, 19:59 Нет не верно удалена нить .См. тут:
http://www.prog.org.ru/topic_21982_0.html |