Qt 4.x Анимация в отдельном потоке |
Здравствуйте, гость ( Вход | Регистрация )
Qt 4.x Анимация в отдельном потоке |
aukolosov |
8.10.2010, 8:47
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 8.10.2010 Пользователь №: 2095 Спасибо сказали: 0 раз(а) Репутация: 0 |
В программе на Qt 4.7.0 под Red Hat Enterprise Linux 5.5 понадобилось реализовать анимацию (вращающаяся картинка). Анимацию сделал в виде отдельного класса унаследованного от QWidget.
Сама анимация работает. Вот только туплю как затолкать ее в отдельный поток, чтобы она не мешала работе основной программы? Т.е. как сделать, чтобы объект класса унаследованного от QWidget работал в отдельном потоке? |
|
|
kwisp |
8.10.2010, 8:49
Сообщение
#2
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
aukolosov,
по-моему, весь гуи в основном потоке должен быть. - в смысле это одно из требований Qt. |
|
|
quarz |
9.10.2010, 13:12
Сообщение
#3
|
Студент Группа: Участник Сообщений: 49 Регистрация: 3.11.2009 Пользователь №: 1202 Спасибо сказали: 5 раз(а) Репутация: 0 |
aukolosov, сделай анимацию в *.gif и отображай в QLabel с помощью QMovie
|
|
|
Алексей1153 |
9.10.2010, 16:57
Сообщение
#4
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
|
|
|
igor_bogomolov |
9.10.2010, 17:45
Сообщение
#5
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
что за глупое требование такое... Не верится А придетсяЭто на самом деле так. Со всем что унаследовано от QWidget можно работать только в основном потоке. Перемещать виджеты между потоками нельзя, так же как и создавать их вне основного (gui) потока. Если как то нужно управлять виджетом из другого потока (например прогрессбаром), это делается через сигнал-слот взаимодействие (понятно что слот будет вызван в контексте основного (gui) потока). Поэтому, так как написал Алексей1153 делать нельзя. |
|
|
Алексей1153 |
9.10.2010, 18:06
Сообщение
#6
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
|
|
|
igor_bogomolov |
9.10.2010, 18:07
Сообщение
#7
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
|
|
|
Алексей1153 |
9.10.2010, 18:55
Сообщение
#8
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
ну я и имел в виду через сигнал
Сообщение отредактировал Алексей1153 - 9.10.2010, 18:55 |
|
|
aukolosov |
21.10.2010, 14:05
Сообщение
#9
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 8.10.2010 Пользователь №: 2095 Спасибо сказали: 0 раз(а) Репутация: 0 |
В общем сделал как посоветовал Алексей1153.
Анимацию запихнул в один класс-наследник виджета и разместил его на форме. а таймер перерисовки в другой класс-наследник QThread и связал их через сигнал-слот. По сигналу с формы поток таймера начинает/прекращает слать сигналы на перерисовку, а в первом классе при поступлении сигнала на перерисовку отрабатывается следующее действие. Поигрался с несколькими потоками с разными приоритетами - вроде бы работает как должно быть. Спасибо всем ответившим. |
|
|
Алексей1153 |
21.10.2010, 14:11
Сообщение
#10
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
|
|
|
Текстовая версия | Сейчас: 29.11.2024, 8:32 |