Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Alex Custov от Октябрь 30, 2007, 16:39



Название: Гарантированная отрисовка виджета
Отправлено: Alex Custov от Октябрь 30, 2007, 16:39
Привет. Есть такой код:

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

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

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

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

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

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

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

не помогает.

Qt 3.3.8, X11/KDE.

Спасибо.


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


Название: Re: Гарантированная отрисовка виджета
Отправлено: Пантер от Октябрь 30, 2007, 18:40
Попробовать вставить что-то типа sleep...


Название: Re: Гарантированная отрисовка виджета
Отправлено: QCasper от Октябрь 30, 2007, 20:17
Как вариант, выполнять heavyMethod() в потоке.


Название: Re: Гарантированная отрисовка виджета
Отправлено: pastor от Октябрь 30, 2007, 22:34
Как вариант, выполнять heavyMethod() в потоке.

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


Название: Re: Гарантированная отрисовка виджета
Отправлено: Alex Custov от Октябрь 30, 2007, 22:40
1) Можно ли привети более подробный код. В каком контексте вызываються эти функции?
2) Как вариант доработать hevayMethod() таким образом, чтобы qApp->processEvents() вызывался в нем (если речь идёт о циклическом процессе)

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

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

qApp->processEvents() довольно опасная штука, а в потоке выполнить не получится (задача не параллелится из-за OpenGL).


Название: Re: Гарантированная отрисовка виджета
Отправлено: pastor от Октябрь 31, 2007, 02:18
А чем опасен qApp->processEvents() ?


Название: Re: Гарантированная отрисовка виджета
Отправлено: vaprele07 от Октябрь 31, 2007, 02:52
QApplication::syncX () - замечу вынесено аж в QApplication :)


Название: Re: Гарантированная отрисовка виджета
Отправлено: Alex Custov от Октябрь 31, 2007, 16:39
QApplication::syncX () - замечу вынесено аж в QApplication :)

не работает syncX().