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