|
Переопределение 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 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
Да. Большинство OS GUI - однопоточные. Возможно IOS как то порешали этот вопрос, Но я не специалист в них вообще. Пускай знающие откомментируют. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2020, 09:28 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravКонкретно в чём проблема? При открытии окна Windows посылает ему пачку сообщений, включая WM_SHOW, WM_ERASEBACKGROUND и как последнее - WM_PAINT. Вот это как раз и плохо. Dimitry Sibiryakov Приложение (по контракту) обязано эти сообщения должным образом обработать в кратчайшие сроки . А если оно в обработчике сообщения захотело какой-нибудь XML с диска прочитать да отпарсить - пользователь вместо окна наблюдает белёсое бельмо и думает, что конкретные руки, это написавшие, надо отрывать по самую задницу, из которой они растут. По вашим рассуждениям выходит так, что Qt унаследовало архитектуру X-Windows, а в этой архитектуре необходимо в сообщении OnPaint обязательно парсить XML файлы или ещё что-то такое делать. Вот Qt портировали на Win, а от этой архитектурной особенности избавится не получилось. :) Ну и я, конечно, в OnPaint парсю не только XML, но ещё и json! ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2020, 19:16 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
petrav Вот это как раз и плохо. чем? Вы на винду не гоните волну))) а) нет фактов пока б) paint винда никогда не гарантировала с) есть ещё WM_ACTIVATE WM_SHOWWINDOW ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2020, 19:35 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
petravНу и я, конечно, в OnPaint парсю не только XML, но ещё и json! Описанные симптомы соответствуют, виновный сознался, дело закрыто. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2020, 22:09 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
А кто нибудь из присуствующих разрабатывал под Gnome/GTK+? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2020, 22:47 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
mayton Gnome/GTK+ ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2020, 22:54 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
PetroNotC Sharp mayton Gnome/GTK+ Astra-Linux-ФСБ ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2020, 22:57 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
Там есть API для веб-камер или для стриминг-трансляций? Ну вобщем в этом направлении. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2020, 22:57 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravНу и я, конечно, в OnPaint парсю не только XML, но ещё и json! Описанные симптомы соответствуют, виновный сознался, дело закрыто. всё же дело не в Qt, а в руках подозреваемого)) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2020, 01:16 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
mayton Там есть API для веб-камер или для стриминг-трансляций? Ну вобщем в этом направлении. Но так как основа дебиан, то https://www.google.com/search?q=debian web camera&oq=debian web camera&aqs=chrome..69i57j0l2.10314j0j8&client=tablet-android-huawei&sourceid=chrome-mobile&ie=UTF-8 И напр. ссыль https://wiki.debian.org/Webcam ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2020, 10:18 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
Del. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2020, 10:48 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
PetroNotC Sharp mayton Там есть API для веб-камер или для стриминг-трансляций? Ну вобщем в этом направлении. Но так как основа дебиан, то https://www.google.com/search?q=debian web camera&oq=debian web camera&aqs=chrome..69i57j0l2.10314j0j8&client=tablet-android-huawei&sourceid=chrome-mobile&ie=UTF-8 И напр. ссыль https://wiki.debian.org/Webcam Из этого комплекта Debian для Ubuntu я попробовал установить Cheese. Уродское приложение с нулевым количеством настроек. Совершенно непонятно зачем оно вообще было создано. Видимо просто как теч-демо или проверка готовности камеры к работе. Далее попробую VLC как такой универсальный комбайн для всего. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2020, 11:10 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
mayton, VLC плеер бесплатно https://www.videolan.org/vlc/download-debian.html и VidBlaster (~300.000 рублей). ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2020, 11:37 |
|
Переопределение QWidget::paintEvent() и мерцание при старте
|
|||
---|---|---|---|
#18+
Да VLC видит вебкамеру. Надо теперь попробовать постримить самому себе. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2020, 14:26 |
|
|
start [/forum/topic.php?all=1&fid=57&tid=2017424]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 152ms |
0 / 0 |