Russian Qt Forum
Октябрь 02, 2024, 05:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Гарантированная отрисовка виджета  (Прочитано 6246 раз)
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« : Октябрь 30, 2007, 16:39 »

Привет. Есть такой код:

Код:
// активизирует этот виджет через KWin
up();

// отрисовка (или upadate(), не важно)
repaint();

// медленный метод, сьедающий CPU time
hevayMethod();

Когда hevayMethod() начинает исполняться, данный виджет должен быть гарантированно виден, все компоненты (тулбары, кнопки и др.) отрисованы.

Проблема в том, что полная отрисовка  происходить только после выполнения hevayMethod(). А до этого виджет всплывает, вместо компонентов и самого виджета - неотрисованные белые прямоугольники.

Можно ли добиться гарантированной отрисовки ?  Код

Код:
repaint(); // или update();
qApp->processEvents();

не помогает.

Qt 3.3.8, X11/KDE.

Спасибо.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Октябрь 30, 2007, 18:25 »

1) Можно ли привети более подробный код. В каком контексте вызываються эти функции?
2) Как вариант доработать hevayMethod() таким образом, чтобы qApp->processEvents() вызывался в нем (если речь идёт о циклическом процессе)
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #2 : Октябрь 30, 2007, 18:40 »

Попробовать вставить что-то типа sleep...
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
QCasper
Гость
« Ответ #3 : Октябрь 30, 2007, 20:17 »

Как вариант, выполнять heavyMethod() в потоке.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #4 : Октябрь 30, 2007, 22:34 »

Как вариант, выполнять heavyMethod() в потоке.

Да, кстате неплохой вариант
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #5 : Октябрь 30, 2007, 22:40 »

1) Можно ли привети более подробный код. В каком контексте вызываються эти функции?
2) Как вариант доработать hevayMethod() таким образом, чтобы qApp->processEvents() вызывался в нем (если речь идёт о циклическом процессе)

Код в принципе так и выглядит. По какому-то событию в главном окне окрывается вспомогательное окошко и начинается длительная операция.

Как я понял, мгновенно отрисовать не получится Грустный

qApp->processEvents() довольно опасная штука, а в потоке выполнить не получится (задача не параллелится из-за OpenGL).
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #6 : Октябрь 31, 2007, 02:18 »

А чем опасен qApp->processEvents() ?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
vaprele07
Гость
« Ответ #7 : Октябрь 31, 2007, 02:52 »

QApplication::syncX () - замечу вынесено аж в QApplication Улыбающийся
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #8 : Октябрь 31, 2007, 16:39 »

QApplication::syncX () - замечу вынесено аж в QApplication Улыбающийся

не работает syncX().
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 23.