Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Shu-Shu от Март 06, 2011, 20:08



Название: Выход из бесконечного цикла
Отправлено: Shu-Shu от Март 06, 2011, 20:08
Пишу в теме для новичков, так что сильно ногами не пинайте  :)
Имеем форму, на ней таблицу, в конструкторе вызывается функция, которая таблицу постоянно рефрешит

while(1)
    {
        QTime time;
        time.start();

        //.......
        //обновление таблицы
        //.......
       
        for(;time.elapsed() < 1000;){
            qApp->processEvents();
        }
       
    }

Далее закрываю программу на крестик, смотрю в процессы и огорчаюсь: процесс висит, видимо из-за бесконечного цикла. Так вот, вопрос в том, как убивать процесс после завершения программы.
И второй вопрос, как сделать более адекватную задержку в выполнении программы, чем приведенная мной?


Название: Re: Выход из бесконечного цикла
Отправлено: m_ax от Март 06, 2011, 20:18
Когда жмёте на крестик  ;D вызывайте слот quit()


Название: Re: Выход из бесконечного цикла
Отправлено: Fat-Zer от Март 06, 2011, 20:33
такое и в страшном сне не приснится))
можно просто QTimer + слот для обновления таблицы.


Название: Re: Выход из бесконечного цикла
Отправлено: Shu-Shu от Март 06, 2011, 20:48
такое и в страшном сне не приснится))
можно просто QTimer + слот для обновления таблицы.

Спасибо, попробую. Про существовании QTimer я вообще не подозревал  :D
А слот quit() не нашел, есть close(), но переопределить его нельзя.

С QTimer'ом все заработало, еще раз спасибо  ;)


Название: Re: Выход из бесконечного цикла
Отправлено: Fat-Zer от Март 06, 2011, 21:15
А слот quit() не нашел, есть close(), но переопределить его нельзя.
это слот QApplication, унаследованный от QCoreApplication. посмотри исходники... там в принципе можно понять, почему не работает...
ЗЫ: вроде при клике на крестик как раз вызывается закрытие окна(слот close()), а при смерте всех QObject'ов уже вызывается метод quit().


Название: Re: Выход из бесконечного цикла
Отправлено: Авварон от Март 07, 2011, 01:28
а при смерте всех QObject'ов уже вызывается метод quit().
это неверно, как минимум 1 куобжект на момент вызова quit есть - это сам куаппликейшн. более того виджеты не удаляются по дефолту, а лишь хайдятся при закрытии их.