Я создаю приложение, в котором я использую цикл внутри paintevent, чтобы нарисовать четыре прямоугольника. И я хочу, чтобы каждый прямоугольник был нарисован после 500 мс. Для этого я применяю msleep(). но используя это при каждом запуске приложения, он вешает трубку в течение 2000 мс, а затем рисует все прямоугольники в одно и то же время. Скажите, кто-нибудь скажет мне решение этой проблемы, чтобы каждый прямоугольник рисовался после задержки. Спасибо.Qt: как использовать sleep() с paintEvent
ответ
Не используйте sleep/msleep
в paintEvent()
. Вы хотите быстро обрабатывать события и не тратьте 2 секунды на вызов функции. Нить не может обрабатывать какие-либо другие события, пока работает код обработки событий.
В простом случае вы можете использовать QTimer
для приема сигналов четыре раза каждые 500 мс. В слоте обработки обновите переменную-член, чтобы указать, сколько прямоугольников нужно рисовать, и вызовите update()
на виджет. Затем в виджетах paintEvent()
проверьте переменную-член, нарисуйте прямоугольники и верните их как можно скорее.
(Для более сложных потребностей анимации, посмотрите на QTimeLine
.)
Я не знаю qt, но я думаю, что ответ кроется в использовании таймера.
Попробуйте вместо сна это может помочь
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
Refer думаю ссылка QEventLoop
- 1. Qt paintevent() не срабатывает
- 2. Qt paintEvent crashes
- 3. Qt создатель: paintEvent Qwidget
- 4. Qt Overriding QLabel PaintEvent
- 5. Как использовать sleep в qt creator
- 6. QT paintEvent для QWidget
- 7. paint() vs paintEvent() in Qt
- 8. Когда виджет Qt получает paintEvent?
- 9. Qt Painter вне paintEvent - невозможно - обходной путь?
- 10. Нужно ли для Qt :: paintEvent быть реентерабельным?
- 11. Qt: Paintevent и отношение родительского ребенка?
- 12. Как использовать sleep() в GTK +
- 13. QWidget's paintEvent() lagging application
- 14. кварты беды перекрывая paintEvent
- 15. QT C++ QPainter - Как правильно использовать 'this'
- 16. Что рисовать в реализации paintEvent?
- 17. Qt paintEvent Могу ли я рисовать дочерний виджет?
- 18. Невозможно использовать QPainter в paintEvent заказного QWidget (Qt5)
- 19. Не удается переопределить VideoWidget paintEvent() в QT C++
- 20. Зачем использовать select() вместо sleep()?
- 21. Как отправить PaintEvent в wxpython
- 22. Зачем использовать Sleep() с бесконечным таймаутом?
- 23. Как использовать Sleep в приложении в iphone
- 24. Как вы подключаете paintEvent к слоту?
- 25. QPainter object object out paintevent
- 26. Обрезка в виде виджета PaintEvent
- 27. PictureBox PaintEvent с другим методом
- 28. Как использовать GLEW с Qt?
- 29. Как использовать Qt с Julia
- 30. qt paintEvent не запускается при вызове func set setWindowFlags (Qt :: FramelessWindowHint); и func winid
Пожалуйста, вы можете предоставить мне Как сделать это для моего кода? – CuriousCase
как ожидание рисовать четыре события рисования прямоугольников также делают другие вещи, и мне нужна задержка только тогда, когда прямоугольники рисуются. Так что я не могу вызывать обновление много раз. Я не знаю, как использовать QTimer. – CuriousCase