Название: Мерцание Отправлено: pakulo от Май 05, 2007, 02:17 Унаследовал объект от QT класса. Рисую поверх основного виджета какой-то свой виджет. При изменении размеров главного виджета нужно изменить размер своего виджета, при этом возникает мерцание.
Я сделал так: void MyClass::paintEvent(QPaintEvent *e) { MyWidget->move(x, y); QWidget::paintEvent(event); } читал про двойную буферизацию, но не понимаю как это тут применить... Спасибо! добавлено спустя 1 минуту: да, забыл... мерцает и мой виджет и основной... Название: Мерцание Отправлено: Tonal от Май 05, 2007, 08:16 А стандартный механизм Layout-ов чем не угодил?
Название: Мерцание Отправлено: SABROG от Май 05, 2007, 11:20 Держи http://qt.osdn.org.ua/flicker-free.html
Название: Мерцание Отправлено: pakulo от Май 05, 2007, 11:35 Цитата: "Tonal" А стандартный механизм Layout-ов чем не угодил? В данном случае не подходит, так как я изменяю размеры своего виджета специальным образом. добавлено спустя 2 минуты: Цитата: "SABROG" Держи http://qt.osdn.org.ua/flicker-free.html Да, как я уже писал... читал эту статью... но не пойму как ее применить в моем случае, я с QT знаком всего пару дней... Может кто подскажет? Просто в функции paintEvent, я сначала рисую свой виджет, а потом вызываю на отрисовку основной виджент QWidget::paintEvent(event); ... Хотя если сделать наоборот, всеравно мерцает. Название: Мерцание Отправлено: SABROG от Май 05, 2007, 12:41 Цитата: "pakulo" Да, как я уже писал... читал эту статью... но не пойму как ее применить в моем случае, я с QT знаком всего пару дней... Ну что ты читал именно эту статью ты не писал... Кто тебя знает где ты еще читал про двойную буфферизацию. Всмысле не знаешь как применить ? Там же код даже есть: Код:
Что мешает адаптировать его под твой paintEvent ? При обновлении основного виджета - все дочерние обновляются автоматически. Кстати вот еще насчет двойной буфферизации: Цитировать From Qt 4.0, QWidget automatically double-buffers its painting, so there's no need to write double-buffering code in paintEvent() to avoid flicker. Название: Мерцание Отправлено: pakulo от Май 05, 2007, 13:45 Не могу понять, как его применить, если я ничего сам не рисую. Все рисует QT.
Попробую объяснить что нужно... У меня есть виджет (взял стандартный), добавил на него еще пару виджетов (тоже стандартный). Мне нужно когда изменяется первый виджет, изменить положение внутренних виджетов. Я это сделал так как написав выше. Т.е. переопределил paintEvent, в котором вызываю функцию изменяющую позицию подчиненных виджетов в зависимости от новых размером, потом вызываю стандартную функцию прористовки виджета QWidget::paintEvent(event); Как мне тут применить двойную буферизацию или может как-то по-другому сделать можно? что бы не мерцало. Название: Мерцание Отправлено: Gryz от Май 07, 2007, 10:56 тебе paintEvent тут совершенно не нужен! Его нужно использовать, только когда что-то отрисовать надо.
Используй событие geometryChanged или что-то типа того! (на этом компе qt нет, не могу точно посмотреть). Название: Мерцание Отправлено: pakulo от Май 07, 2007, 13:46 Gryz, спасибо большое, я уже так и сделал!
Название: Мерцание Отправлено: Muller от Май 07, 2007, 13:47 Цитата: "pakulo" Цитата: "Tonal" А стандартный механизм Layout-ов чем не угодил? В данном случае не подходит, так как я изменяю размеры своего виджета специальным образом. А что мешает создать свой Layout, породив его от QLayout? См. пример customlayout. |