|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
Есть тут у меня волшебный виджет. Класс унаследованный от QWidget. Он полностью рисует себя сам, переопределяя метод QWidget::paintEvent(). Так вот при старте приложения этот виджет полностью отображается сереньким и только через мгновение отрисовывается. Раздражает. В конструкторе отрисоваться мы не можем, размеры не известны. Потом прилетает событие resizeEvent(). Главное окно ещё не отображено на экране. Потом всё отображается -- виджет серый. И только потом приходит paintEvent(). Простейшая проблема, не получается решить её. Тут нужно, наверное, какой-то нюанс знать? Или тут косяк где-то? Ведь стандартные контролы так себя не ведут? Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2020, 14:45 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
petravВедь стандартные контролы так себя не ведут? Qt не использует стандартные контролы. Поэтому тормоза и глюки отрисовки - врождённая болезнь. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2020, 14:52 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravВедь стандартные контролы так себя не ведут? Qt не использует стандартные контролы. Поэтому тормоза и глюки отрисовки - врождённая болезнь. Я имел в виду стандартные контролы Qt. Если у нас приложение состоит только из них, то я что-то не помню, что бы при старте приложения появлялось полностью серое окно и только потом вся отрисовка. Вот в чём проблема. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2020, 15:22 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
petrav, Ну пришпильте тут проект минимальный в котором только в лог вывод событий onCreate, onPaint, onShow,...., Могу попробовать у себя. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2020, 16:01 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
PetroNotC Sharp petrav, Ну пришпильте тут проект минимальный в котором только в лог вывод событий onCreate, onPaint, onShow,...., Могу попробовать у себя. На днях сделаю. Это всё же за пять минут не сделать, а у меня тут основная работа другая. :) VS или Креатор? Я только что сделал в Креаторе приложение на 90% площади там QTableWidget. Вот это 5-ть минут. И для контраста (что бы мигание было заметнее) сделал фон таблицы чёрным. Так вон оно сразу чёрным на весь экран и появляется. А моё фуфло белым. Т.е. нужно что бы оно отрисовалось до отображения. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2020, 16:13 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
petrav, я могу рассказать теорию :) computer graphics Double Buffer principle Section 6: Rendering https://www.udemy.com/course/game-loop-c-sdl/ ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2020, 16:42 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
petrav, 1. ОК будем ждать пример 2. Только креатор. Я когда начинал тут сообщество так решило. И я не прогадал. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2020, 17:09 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
petrav, >А моё фуфло белым А ты не начинай с фуфла и своих компонентов. Тебе виднее конечно. У меня заказчик не требует супер пупер наворотов что требует РУЧНОЙ ОТРИСОВКИ. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2020, 17:13 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
Возможно Qt используют свою систему евентов отдельно от Windows-ной. В целях совместимости со всеми Gnome, KDE, e.t.c. Отсюда и неприятные артифакты. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2020, 18:13 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
PetroNotC Sharp petrav, >А моё фуфло белым А ты не начинай с фуфла и своих компонентов. Тебе виднее конечно. У меня заказчик не требует супер пупер наворотов что требует РУЧНОЙ ОТРИСОВКИ. Тут так принято, в ряде случаев. Это я про ручную отрисовку. Я тут заметил, что у меня и Qt Creator запускается точно также. Сначала пустое серенькое окно, а потом появляются элементы GUI. Инициативность сразу поугасла. Так что пока отложим проблему. Когда снова случится приступ перфекционизма, я приду с готовым проектом. Но, меня продолжают терзать смутные сомнения. Где-то тут косяк. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 15:57 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
petravГде-то тут косяк. Его скурили разработчики Qt когда натягивали свою (а точнее X-windows) архитектуру на всё остальное. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 17:09 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
petrav, Любой код, любая строчка это компромисс между сделать лучше и забить))). ЗЫ. Кстати, баг одинаков в винде и линуксе? Я просто пишу в винде а сдаю работу в линуксе. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 18:10 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
PetroNotC Sharp petrav, Любой код, любая строчка это компромисс между сделать лучше и забить))). ЗЫ. Кстати, баг одинаков в винде и линуксе? Я просто пишу в винде а сдаю работу в линуксе. Я только под Win работаю. Хотя код на 99% кроссплатформенный. Но вот этот один процент может кардинальные проблемы создать. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 18:30 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
petrav, Это тоже не понятно. Если код в продакшене в линуксе, то без тестов там не обойтись. Так как все другое. Может там вашего глюка и нету. Ну а фраза "все другое", это работа с файловой системой. А если код только винда, то я бы и Qt не использовал. Правда тут обсуждение было про гуи от плюсов)))). Тоже не просто))) Имхо ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 18:42 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravГде-то тут косяк. Его скурили разработчики Qt когда натягивали свою (а точнее X-windows) архитектуру на всё остальное. Спорное утверждение. Я заметил, что у меня и NotePad++ так стартует: сначала белый фон окна, а через мгновение тёмный фон текста. А он написан на WinAPI. Тут может быть проблема даже в Windows. Она с начала должна послать WM_PAINT, закешировать это в контексте устройства вывода, а потом сразу выдать на экран готовый pixmap. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2020, 18:57 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
petrav NotePad++ так стартует: одно дело старт приложения - главного окна. И другое дела свои окна. Свои окна должны отображаться нормально. На окно приложения при старте забить. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2020, 19:11 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
petravА он написан на WinAPI. Это он сам написан на С++, а Scintilla, которую он показывает в главном окне - GTK, которое по архитектуре растёт из того же места, что и Qt. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2020, 20:08 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravА он написан на WinAPI. Это он сам написан на С++, а Scintilla, которую он показывает в главном окне - GTK, которое по архитектуре растёт из того же места, что и Qt. Очень может быть, я об этом не подумал. Но вернёмся к архитектуре Qt. Неужели происхождение Qt от X-Windows мешает задать свойства WinAPI главного окна так, что бы оно сначала получило WM_PAINT, а только потом ОС это окно выбросило бы на экран в виде готовой картинки? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2020, 20:22 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
petrav, Вас именно главное окно приложения интересует? Во остальных окнах норм? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2020, 21:23 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
petrav, Почему спрашивал про главное окно. В дельфи программах только при старте и только для главного были такие эффекты. Особенно когда поток главного окна тормозил (запрос к бд) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2020, 21:33 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
petravоно сначала получило WM_PAINT, а только потом ОС это окно выбросило бы на экран в виде готовой картинки? Нет, Windows так не работает. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2020, 22:03 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravоно сначала получило WM_PAINT, а только потом ОС это окно выбросило бы на экран в виде готовой картинки? Нет, Windows так не работает. Тогда выходит проблема не в Qt, а в Windows? Впрочем, я думаю тут решаемые проблемы. Просто кто-то недоработал. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2020, 22:15 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
petravТогда выходит проблема не в Qt, а в Windows? Нет, проблема как раз таки в qt, которое работает не так, как должно работать приложение, написанное по спекам Windows. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2020, 23:06 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravТогда выходит проблема не в Qt, а в Windows? Нет, проблема как раз таки в qt, которое работает не так, как должно работать приложение, написанное по спекам Windows. Конкретно в чём проблема? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2020, 23:34 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
petravКонкретно в чём проблема? При открытии окна Windows посылает ему пачку сообщений, включая WM_SHOW, WM_ERASEBACKGROUND и как последнее - WM_PAINT. Приложение (по контракту) обязано эти сообщения должным образом обработать в кратчайшие сроки . А если оно в обработчике сообщения захотело какой-нибудь XML с диска прочитать да отпарсить - пользователь вместо окна наблюдает белёсое бельмо и думает, что конкретные руки, это написавшие, надо отрывать по самую задницу, из которой они растут. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2020, 00:20 |
|
|
start [/forum/topic.php?fid=57&msg=39960837&tid=2017424]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 137ms |
0 / 0 |