Название: Нет перерисовки в цикле Отправлено: p222 от Июль 07, 2009, 10:39 Qt 4.5.0, XP/mingw. Произвожу перемещение элемента (линии) по кнопке:
Код: void GrView::onMoveLeft() Код: void GrView::MoveTo0() До protected QThread::msleep добрался так: Код: class Helper: public QThread { Название: Re: Нет перерисовки в цикле Отправлено: kamre от Июль 07, 2009, 13:12 Как добиться перерисовки в цикле? Использовать QTimer (http://doc.qtsoftware.com/latest/qtimer.html). Название: Re: Нет перерисовки в цикле Отправлено: p222 от Июль 08, 2009, 11:45 Цитировать Использовать QTimer (http://doc.qtsoftware.com/latest/qtimer.html). Ну вот, допустим, есть у меня поле 40х40. Мне нужно его промерить, перемещая датчик шаговыми двигателями, и одновременно выводить на экран положение датчика. Не представляю, как в данном случае использовать QTimer. Название: Re: Нет перерисовки в цикле Отправлено: BaltikS от Июль 08, 2009, 14:24 Что то я совсем не втыкаю, какое поле? Какой датчик? И причём тут Helper::msleep(5)?
Название: Re: Нет перерисовки в цикле Отправлено: lit-uriy от Июль 08, 2009, 16:08 Внешний девайс работает во много раз медленее чем компьютер.
Можно с потоками, а можно и без потоков, например: 1) Посылаешь запрос/команду устройству 2) Получишь данные от девайса 3) пошли следующий запрос, а в это время рисуй 4) когда нарисуешь, проверь ответ от девайса, если есть, то на п.3 Название: Re: Нет перерисовки в цикле Отправлено: p222 от Июль 08, 2009, 17:15 Внешний девайс работает во много раз медленее чем компьютер. Можно с потоками, а можно и без потоков, например: 1) Посылаешь запрос/команду устройству 2) Получишь данные от девайса 3) пошли следующий запрос, а в это время рисуй 4) когда нарисуешь, проверь ответ от девайса, если есть, то на п.3 Получения данных от девайса не предусмотрено. К сожалению, я на этом запнулся. Можно ли реализовать это с помощью QTimer::singleShot? У меня пока не получилось. Не делать же, в самом деле, задержку так: for(i=0;i<100000000;i++)! :) Название: Re: Нет перерисовки в цикле Отправлено: lit-uriy от Июль 08, 2009, 18:35 >>Получения данных от девайса не предусмотрено.
>>К сожалению, я на этом запнулся. Можно ли реализовать это с помощью QTimer::singleShot? тут совсем не понял. Название: Re: Нет перерисовки в цикле Отправлено: break от Июль 08, 2009, 18:37 Я вообще то тоже мало понял что надо но есть методы
QTest::qSleep и QTest::qWait - этот оставляет получение событий интерфейса и сети живыми - т.е. должно помочь возможно? Вообще как то странно допустим возникло событие что надо переметсить девайс - отдаем команду в отрисовавающую форму, затем в сам девайс зачем слиипы и таймеры раз от девайса данные все равно не приходят? Название: Re: Нет перерисовки в цикле Отправлено: fuCtor от Июль 18, 2009, 21:46 Отрисовка произойдет когда до элемента дойдет сообщение о необходимости отрисовки. Поэтому после update() добавьте QAplication::processEvents().
|