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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Окошко закрывается раньше времени  (Прочитано 4632 раз)
taifun
Гость
« : Июль 15, 2011, 12:41 »

День добрый!
        Есть форма на форме виджет, который выводит численное значение, допустим 100. после окончания работы с программой, при закрытии окна сначала необходимо понизить 100 до 1 через N-ый промежуток времени и все это отображать в виджете и только после этого закрывать окно. Процедура понижения 100 до 1 находится в отдельном классе и я ее вызываю в деструкторе. В итоге что получаю: окошко закрывается и я не вижу результата работы. Как мне сделать, чтобы окошко закрывалось после достижения счетчика единицы?
Записан
NortT
Гость
« Ответ #1 : Июль 15, 2011, 17:00 »

А если счетчик этот в отдельный метод запихать?
Записан
_OLEGator_
Гость
« Ответ #2 : Июль 16, 2011, 10:58 »

Вызывай не в деструкторе, а в QWidget::closeEvent ( QCloseEvent * event )
Записан
taifun
Гость
« Ответ #3 : Июль 18, 2011, 09:38 »

Вызывай не в деструкторе, а в QWidget::closeEvent ( QCloseEvent * event )

Сделал, теперь окошко не закрывается пока не счетчик не достигнет единицы, но и результата понижения я не вижу.
Записан
_OLEGator_
Гость
« Ответ #4 : Июль 18, 2011, 10:29 »

покажи код, где ты понижаешь значение
Записан
taifun
Гость
« Ответ #5 : Июль 19, 2011, 13:20 »

Код:
void finish_work::run()
{
    for(int i = 15; i > 0; i--)
    {
        qDebug() << "Number " << i;
        emit show_work(i);
        sleep(1);
    }

}

исходный код прикрепил.
Записан
_OLEGator_
Гость
« Ответ #6 : Июль 19, 2011, 13:48 »

Код
C++ (Qt)
void MainWindow::closeEvent(QCloseEvent *event)
{
   qDebug() << trUtf8("");
 
   //event->ignore();
   end.start_END();
 
   [b]end.wait();[/b]
   //event->accept();
 
}
 

В closeEvent вызов функции end.wait() блокирует главный поток и следовательно его перерисовку, непонятно зачем для этого поток создавать, нужно либо убрать поток, либо реализовать уменьшение счетчика иначе.
Записан
taifun
Гость
« Ответ #7 : Июль 19, 2011, 14:22 »

Поток убрал, результат тот же. А как подругому можно реализовать? Но реализовать надо именно в finish_work
Записан
_OLEGator_
Гость
« Ответ #8 : Июль 19, 2011, 14:34 »

вызвав QApplication::processEvents() после sleep(1) добьешься нужного результата, но в последнем проекте идет вызов функции без выполнения ее в потоке
« Последнее редактирование: Июль 19, 2011, 14:47 от _OLEGator_ » Записан
taifun
Гость
« Ответ #9 : Июль 19, 2011, 14:57 »

но в последнем проекте идет вызов функции без выполнения ее в потоке

Cовершенно верно, это я понимаю ... с QApplication::processEvents(); заработало. так как надо. Спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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