Название: QTime Отправлено: vladislav4k от Июль 11, 2012, 23:47 Уже 100500 тема от меня.
Вопрос: при нажатии на кнопку вызывается функция, в начале которой создается лейбл(с картинкой) и выводится в виджет, естественно все работает. После показа лебла добавляю: QTime time; time.start(); for (int i = 0; i < 10; ) { if (time.elapsed() > 40) { time.start(); ++i; } } После чего в лейбл вывожу другую картинку. Но при запуске, приложение крутит цикл с таймером, и только потом выводит картинки. Почему? Мне нужно что б вывелась одна, и через некоторое время вторая. (как анимация) Как это реализовать? Название: Re: QTime Отправлено: kibsoft от Июль 12, 2012, 00:16 Код: QTimer timer; Как-то так..Сам не тестил.Можно еще без QEventLoop, создать новый слот и по таймауту в нем менять картинку. Название: Re: QTime Отправлено: Bepec от Июль 12, 2012, 06:52 вставляй ради прикола qApp->processEvents.
У тебя форма не может обработать события - ты ей циклом не даёшь. Как вариант - вместо постоянного цикла используй новый слот с таймером. Если вообще всё плохо, можешь попробовать вставлять processEvents в каждой итерации цикла. Название: Re: QTime Отправлено: vladislav4k от Июль 12, 2012, 10:11 вставляй ради прикола qApp->processEvents. Да не пашет из за цикла.У тебя форма не может обработать события - ты ей циклом не даёшь. Как вариант - вместо постоянного цикла используй новый слот с таймером. Если вообще всё плохо, можешь попробовать вставлять processEvents в каждой итерации цикла. Можно по подробней, а то тяжело понять) Название: Re: QTime Отправлено: Bepec от Июль 12, 2012, 10:20 У каждого потока есть очередь событий.
Выглядит примерно так Код: отрисовка мышки Т.е. меняя картинку ты добавляешь это событие в конец очереди. А цикл у тебя всё продолжается и не даёт это событие исполнить. А уже как цикл отработает и твою программу отпустит, сразу происходят накопленные изменения картинки. processEvents вызывает дальнейшую обработку событий, до конца накопленных. Т.е. при вызове будет обработаны все события из очереди, а после продолжится выполнение функции. PS если использовать таймер(QTimer), то будет всё хоккей. Название: Re: QTime Отправлено: vladislav4k от Июль 12, 2012, 11:48 У каждого потока есть очередь событий. Выглядит примерно так Код: отрисовка мышки Т.е. меняя картинку ты добавляешь это событие в конец очереди. А цикл у тебя всё продолжается и не даёт это событие исполнить. А уже как цикл отработает и твою программу отпустит, сразу происходят накопленные изменения картинки. processEvents вызывает дальнейшую обработку событий, до конца накопленных. Т.е. при вызове будет обработаны все события из очереди, а после продолжится выполнение функции. PS если использовать таймер(QTimer), то будет всё хоккей. Огромное спасибо! Очень помог, понял все, все работает! Бывают добрые люди:) |