Russian Qt Forum

Qt => Вопросы новичков => Тема начата: taifun от Июля 15, 2011, 12:41



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


Название: Re: Окошко закрывается раньше времени
Отправлено: NortT от Июля 15, 2011, 17:00
А если счетчик этот в отдельный метод запихать?


Название: Re: Окошко закрывается раньше времени
Отправлено: _OLEGator_ от Июля 16, 2011, 10:58
Вызывай не в деструкторе, а в QWidget::closeEvent ( QCloseEvent * event )


Название: Re: Окошко закрывается раньше времени
Отправлено: taifun от Июля 18, 2011, 09:38
Вызывай не в деструкторе, а в QWidget::closeEvent ( QCloseEvent * event )

Сделал, теперь окошко не закрывается пока не счетчик не достигнет единицы, но и результата понижения я не вижу.


Название: Re: Окошко закрывается раньше времени
Отправлено: _OLEGator_ от Июля 18, 2011, 10:29
покажи код, где ты понижаешь значение


Название: Re: Окошко закрывается раньше времени
Отправлено: taifun от Июля 19, 2011, 13:20
Код:
void finish_work::run()
{
    for(int i = 15; i > 0; i--)
    {
        qDebug() << "Number " << i;
        emit show_work(i);
        sleep(1);
    }

}

исходный код прикрепил.


Название: Re: Окошко закрывается раньше времени
Отправлено: _OLEGator_ от Июля 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() блокирует главный поток и следовательно его перерисовку, непонятно зачем для этого поток создавать, нужно либо убрать поток, либо реализовать уменьшение счетчика иначе.


Название: Re: Окошко закрывается раньше времени
Отправлено: taifun от Июля 19, 2011, 14:22
Поток убрал, результат тот же. А как подругому можно реализовать? Но реализовать надо именно в finish_work


Название: Re: Окошко закрывается раньше времени
Отправлено: _OLEGator_ от Июля 19, 2011, 14:34
вызвав QApplication::processEvents() после sleep(1) добьешься нужного результата, но в последнем проекте идет вызов функции без выполнения ее в потоке


Название: Re: Окошко закрывается раньше времени
Отправлено: taifun от Июля 19, 2011, 14:57
но в последнем проекте идет вызов функции без выполнения ее в потоке

Cовершенно верно, это я понимаю ... с QApplication::processEvents(); заработало. так как надо. Спасибо.