Qt: как использовать sleep () с paintEvent - PullRequest
0 голосов
/ 02 октября 2010

Я создаю приложение, в котором я использую цикл внутри painttevent, чтобы нарисовать четыре прямоугольника. И я хочу, чтобы каждый прямоугольник должен был быть нарисован через 500 мс.Запустите приложение, оно зависает на 2000 мс, а затем рисует все прямоугольники одновременно. Кто-нибудь может сказать мне решение этой проблемы, чтобы каждый прямоугольник рисовался после задержки.Спасибо.

Ответы [ 3 ]

5 голосов
/ 02 октября 2010

Не используйте sleep/msleep в paintEvent(). Вы хотите быстро обработать свои события и не тратить 2 секунды на вызов функции. Поток не может обрабатывать какие-либо другие события, пока выполняется код обработки событий.

В таком простом случае, как этот, вы можете использовать QTimer для получения сигналов четыре раза каждые 500 мс. В слоте обработки обновите переменную-член, чтобы указать, сколько прямоугольников нужно нарисовать, и вызовите update() в виджете. Затем в paintEvent() виджета проверьте переменную-член, нарисуйте прямоугольники и вернитесь как можно скорее.

(Для более сложных анимаций взгляните на QTimeLine.)

0 голосов
/ 06 октября 2014

Попробуйте вместо сна это может помочь

    QTimer *t= new QTimer();
    t->setSingleShot(true);
    t->start(60000);//this is the time to sleep in this case 60 seconds 
    QEventLoop pause;
    connect(t, SIGNAL(timeout()), &pause, SLOT(quit()));
    pause.exec();//keeps the program responsive 

См. Ссылку link QEventLoop

0 голосов
/ 02 октября 2010

Я не знаю QT, но я думаю, что ответ лежит с использованием таймера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...