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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Перерисовка виджетов в KDE  (Прочитано 2838 раз)
rost
Гость
« : Май 04, 2013, 14:12 »

В KDE под линукс столкнулся с тем, что как-то не бодро идет отображение производного от QAbstractItemView виджета.
Как оказалось, paintEvent вызывалось до 12 раз при первом отображении. Собственно, это касается и родных виджетов типа QTableWidget, QTextEdit.
Код:
class TableWidget : public QTableWidget
{
protected:
virtual void paintEvent ( QPaintEvent * e)
{
qDebug() << e->rect();
QTableWidget::paintEvent(e);
}
};

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
TableWidget w;
w.resize(400, 400);
w.show();
return a.exec();
}

Вывод:
Код:
QRect(0,0 394x394) 
QRect(0,0 394x394)
QRect(0,0 394x394)
QRect(0,0 394x394)
QRect(0,0 394x394)
QRect(0,0 394x394)
QRect(0,0 394x394)
QRect(0,0 394x394)
QRect(0,0 394x394)
QRect(0,0 394x394)
QRect(0,0 394x394)

В win7 этот же код вызывает paintEvent при первом отображении 1 раз. Кто-нибудь натыкался на такое? Как избежать ненужных перерисовок?
Записан
Bepec
Гость
« Ответ #1 : Май 04, 2013, 15:58 »

Ищите, смотрите что вызывает перерисовку.
Записан
rost
Гость
« Ответ #2 : Май 04, 2013, 18:41 »

Вроде, нашел.
Добавил eventFilter, обнаружил 4 вызова ChildPolished от четырех разных (но безымянных) Oxygen::SunkenFrameShadow.
Запустил со стилями plastique, cde, cleanlooks - paintEvent вызывается один раз.

Такая вот особенность Oxygen-а Грустный
Записан
_OLEGator_
Гость
« Ответ #3 : Май 04, 2013, 19:39 »

Возможно там какая-то анимация имеется?
Записан
Командор
Гость
« Ответ #4 : Май 05, 2013, 20:07 »

Вроде, нашел.
Добавил eventFilter, обнаружил 4 вызова ChildPolished от четырех разных (но безымянных) Oxygen::SunkenFrameShadow.
Запустил со стилями plastique, cde, cleanlooks - paintEvent вызывается один раз.

Такая вот особенность Oxygen-а Грустный

Была похожая проблема. При этом paintEvent вызывался один раз, но область перерисовки event0>region() все время была равна размеру виджета в скроле. Т.е. при прокрутке виджета нужно было его перерисовывать полностью. При замене стиля на пластик все было нормально - вызывалась перерисовка только части виджета. Так что Oxygen в плане производительности хромает.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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