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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QEvent  (Прочитано 6179 раз)
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« : Май 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();
   }
}

но ничего не выходит. Даже на мнажатие не реагирует.
Не могли бы подсказать почему???  Непонимающий Спасибо!
Записан
mutineer
Гость
« Ответ #1 : Май 22, 2012, 14:21 »

что за метод stopThread и почему в него QKeyEvent должны приходить?
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #2 : Май 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;
 ...

};
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #3 : Май 22, 2012, 14:32 »

А QKeyEvent Так как мы обрабатываем событие по нажатию кнопки. Улыбающийся
Записан
mutineer
Гость
« Ответ #4 : Май 22, 2012, 14:34 »

Я догадался что это обработчик события... Он зарегистрирован как обработчик? Почему система должна вызвать именно этот метод?
Записан
DmitryM
Гость
« Ответ #5 : Май 22, 2012, 14:39 »

Вот эти переопределяемые методы для чего присутствуют?
Код:
virtual bool	event ( QEvent * event )
virtual void keyPressEvent ( QKeyEvent * event )
virtual void keyReleaseEvent ( QKeyEvent * event )
Записан
Bepec
Гость
« Ответ #6 : Май 22, 2012, 14:40 »

Сейчас у вас есть просто метод класса StopThread, который у вас в программе не вызывается. Угум?
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #7 : Май 22, 2012, 14:41 »

А что значит зарегистрирован Непонимающий

Обработчик события это же - метод, которому в качестве параметра передается указатель на объет описывающий событие.
Записан
mutineer
Гость
« Ответ #8 : Май 22, 2012, 14:42 »

А что значит зарегистрирован Непонимающий

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

Но система ведь должна как-то узнать что нужно вызывать именно этот метод, а не какой-нить другой. Тебе привели три метода, переопределяешь нужный и он будет вызываться
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #9 : Май 22, 2012, 14:42 »

Сейчас у вас есть просто метод класса StopThread, который у вас в программе не вызывается. Угум?

Да
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #10 : Май 22, 2012, 14:44 »

А что значит зарегистрирован Непонимающий

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

Но система ведь должна как-то узнать что нужно вызывать именно этот метод, а не какой-нить другой. Тебе привели три метода, переопределяешь нужный и он будет вызываться

Понял. А так никак нельзя оставить?
Записан
mutineer
Гость
« Ответ #11 : Май 22, 2012, 14:45 »

Понял. А так никак нельзя оставить?

Так - это не менять код? можно, но работать не будет
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #12 : Май 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();

   }   
}

но, что-то тоже не работает
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #13 : Май 22, 2012, 14:50 »

Извините Улыбающийся

Все заработало Улыбающийся

Спасибо за разъяснения!!!
Записан
Bepec
Гость
« Ответ #14 : Май 22, 2012, 14:51 »

А счас у вас уже переопределённый метод по поимке злостных клавиш(?).

PS в названии темы припишите [РЕШЕНО]

Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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