Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Igors от Октябрь 26, 2012, 14:00



Название: Что делает repaint ?
Отправлено: Igors от Октябрь 26, 2012, 14:00
Добрый день

Взялось отсюдв http://www.prog.org.ru/index.php?topic=23356.msg165144#msg165144 (http://www.prog.org.ru/index.php?topic=23356.msg165144#msg165144). Давайте рассматривать общий случай, всякий раз упоминать "по крайней мере на некоторых платформах" не будем.

1) Самое простое "repaint (насильно) перерисовывает окно". Написано в букваре
Цитировать
Repaints the widget directly by calling paintEvent() immediately, unless updates are disabled or the widget is hidden.
Однако пример этого не подтверждает, окно не перерисовано при выходе из repaint

2) Чуть хитрее "repaint перерисовывает окно, но в буфере, а когда обновится экран - решает OC". Тоже нет, paintEvent не было вызвано до выхода из repaint

3) Тогда как  ???

Спасибо


Название: Re: Что делает repaint ?
Отправлено: navrocky от Октябрь 26, 2012, 18:47
qbackingstore.cpp:1641 (qt-4.8.3)
Код
C++ (Qt)
#ifdef Q_WS_MAC
   // No difference between update() and repaint() on the Mac.
   update_sys(toBePainted);
   return;
#endif
 

На остальных плаформах repaint вроде должен быть честный. При беглом осмотре сорцов складывается такое впечатление.


Название: Re: Что делает repaint ?
Отправлено: Igors от Октябрь 29, 2012, 11:35
На остальных плаформах repaint вроде должен быть честный. При беглом осмотре сорцов складывается такое впечатление.
Я против этого не возражаю, но тогда надо сказать внятно

Метод repaint НЕ кросс-платформенный

А в Ассыстенте этого нет - и это смущает  :)


Название: Re: Что делает repaint ?
Отправлено: navrocky от Октябрь 29, 2012, 11:41
Согласен. Недоработочка в доке. Да и вообще repaint надо сделать deprecated, раз толку от него ноль.

Я вот кстати, как оказалось, тоже боролся недавно с repaint, я написал его в одном месте вместо update, и месяц не мог понять почему у меня интерфейс дергается при изменении размеров окна. Т.е. как будто включились native widgets.

Т.е. этот метод у меня, как назло, отрабатывал хорошо =)