powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Переопределение QWidget::paintEvent() и мерцание при старте
40 сообщений из 40, показаны все 2 страниц
Переопределение QWidget::paintEvent() и мерцание при старте
    #39959502
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть тут у меня волшебный виджет. Класс унаследованный от QWidget.

Он полностью рисует себя сам, переопределяя метод QWidget::paintEvent().

Так вот при старте приложения этот виджет полностью отображается сереньким и только через мгновение отрисовывается. Раздражает. В конструкторе отрисоваться мы не можем, размеры не известны. Потом прилетает событие resizeEvent(). Главное окно ещё не отображено на экране. Потом всё отображается -- виджет серый. И только потом приходит paintEvent().

Простейшая проблема, не получается решить её. Тут нужно, наверное, какой-то нюанс знать? Или тут косяк где-то? Ведь стандартные контролы так себя не ведут?

Спасибо!
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39959510
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravВедь стандартные контролы так себя не ведут?

Qt не использует стандартные контролы. Поэтому тормоза и глюки отрисовки - врождённая болезнь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39959536
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravВедь стандартные контролы так себя не ведут?

Qt не использует стандартные контролы. Поэтому тормоза и глюки отрисовки - врождённая болезнь.

Я имел в виду стандартные контролы Qt. Если у нас приложение состоит только из них, то я что-то не помню, что бы при старте приложения появлялось полностью серое окно и только потом вся отрисовка. Вот в чём проблема.
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39959553
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,
Ну пришпильте тут проект минимальный в котором только в лог вывод событий onCreate, onPaint, onShow,....,
Могу попробовать у себя.
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39959561
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
petrav,
Ну пришпильте тут проект минимальный в котором только в лог вывод событий onCreate, onPaint, onShow,....,
Могу попробовать у себя.

На днях сделаю. Это всё же за пять минут не сделать, а у меня тут основная работа другая. :) VS или Креатор?

Я только что сделал в Креаторе приложение на 90% площади там QTableWidget. Вот это 5-ть минут. И для контраста (что бы мигание было заметнее) сделал фон таблицы чёрным. Так вон оно сразу чёрным на весь экран и появляется. А моё фуфло белым. Т.е. нужно что бы оно отрисовалось до отображения.
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39959576
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,
я могу рассказать теорию :)
computer graphics Double Buffer principle

Section 6: Rendering
https://www.udemy.com/course/game-loop-c-sdl/
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39959597
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,
1. ОК будем ждать пример
2. Только креатор.
Я когда начинал тут сообщество так решило. И я не прогадал.
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39959598
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,
>А моё фуфло белым
А ты не начинай с фуфла и своих компонентов.
Тебе виднее конечно.
У меня заказчик не требует супер пупер наворотов что требует РУЧНОЙ ОТРИСОВКИ.
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39959621
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно Qt используют свою систему евентов отдельно от Windows-ной.
В целях совместимости со всеми Gnome, KDE, e.t.c. Отсюда и неприятные
артифакты.
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39959906
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
petrav,
>А моё фуфло белым
А ты не начинай с фуфла и своих компонентов.
Тебе виднее конечно.
У меня заказчик не требует супер пупер наворотов что требует РУЧНОЙ ОТРИСОВКИ.

Тут так принято, в ряде случаев. Это я про ручную отрисовку.

Я тут заметил, что у меня и Qt Creator запускается точно также. Сначала пустое серенькое окно, а потом появляются элементы GUI. Инициативность сразу поугасла. Так что пока отложим проблему. Когда снова случится приступ перфекционизма, я приду с готовым проектом.

Но, меня продолжают терзать смутные сомнения. Где-то тут косяк.
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39959963
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravГде-то тут косяк.

Его скурили разработчики Qt когда натягивали свою (а точнее X-windows) архитектуру на всё
остальное.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39959998
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,
Любой код, любая строчка это компромисс между сделать лучше и забить))).
ЗЫ.
Кстати, баг одинаков в винде и линуксе?
Я просто пишу в винде а сдаю работу в линуксе.
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39960016
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
petrav,
Любой код, любая строчка это компромисс между сделать лучше и забить))).
ЗЫ.
Кстати, баг одинаков в винде и линуксе?
Я просто пишу в винде а сдаю работу в линуксе.

Я только под Win работаю. Хотя код на 99% кроссплатформенный. Но вот этот один процент может кардинальные проблемы создать.
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39960024
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,
Это тоже не понятно.
Если код в продакшене в линуксе, то без тестов там не обойтись. Так как все другое. Может там вашего глюка и нету.
Ну а фраза "все другое", это работа с файловой системой.
А если код только винда, то я бы и Qt не использовал.
Правда тут обсуждение было про гуи от плюсов)))). Тоже не просто)))
Имхо
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39960837
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravГде-то тут косяк.

Его скурили разработчики Qt когда натягивали свою (а точнее X-windows) архитектуру на всё
остальное.

Спорное утверждение. Я заметил, что у меня и NotePad++ так стартует: сначала белый фон окна, а через мгновение тёмный фон текста. А он написан на WinAPI.

Тут может быть проблема даже в Windows. Она с начала должна послать WM_PAINT, закешировать это в контексте устройства вывода, а потом сразу выдать на экран готовый pixmap.
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39960839
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
NotePad++ так стартует:

одно дело старт приложения - главного окна.
И другое дела свои окна.
Свои окна должны отображаться нормально. На окно приложения при старте забить.
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39960855
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravА он написан на WinAPI.

Это он сам написан на С++, а Scintilla, которую он показывает в главном окне - GTK,
которое по архитектуре растёт из того же места, что и Qt.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39960860
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravА он написан на WinAPI.

Это он сам написан на С++, а Scintilla, которую он показывает в главном окне - GTK,
которое по архитектуре растёт из того же места, что и Qt.

Очень может быть, я об этом не подумал.

Но вернёмся к архитектуре Qt. Неужели происхождение Qt от X-Windows мешает задать свойства WinAPI главного окна так, что бы оно сначала получило WM_PAINT, а только потом ОС это окно выбросило бы на экран в виде готовой картинки?
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39960879
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,
Вас именно главное окно приложения интересует?
Во остальных окнах норм?
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39960882
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,
Почему спрашивал про главное окно.
В дельфи программах только при старте и только для главного были такие эффекты.
Особенно когда поток главного окна тормозил (запрос к бд)
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39960891
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravоно сначала получило WM_PAINT, а только потом ОС это окно выбросило бы на экран в виде
готовой картинки?

Нет, Windows так не работает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39960894
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravоно сначала получило WM_PAINT, а только потом ОС это окно выбросило бы на экран в виде
готовой картинки?

Нет, Windows так не работает.

Тогда выходит проблема не в Qt, а в Windows? Впрочем, я думаю тут решаемые проблемы. Просто кто-то недоработал.
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39960918
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravТогда выходит проблема не в Qt, а в Windows?

Нет, проблема как раз таки в qt, которое работает не так, как должно работать приложение,
написанное по спекам Windows.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39960931
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravТогда выходит проблема не в Qt, а в Windows?

Нет, проблема как раз таки в qt, которое работает не так, как должно работать приложение,
написанное по спекам Windows.

Конкретно в чём проблема?
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39960949
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravКонкретно в чём проблема?

При открытии окна Windows посылает ему пачку сообщений, включая WM_SHOW,
WM_ERASEBACKGROUND и как последнее - WM_PAINT. Приложение (по контракту) обязано эти
сообщения должным образом обработать в кратчайшие сроки . А если оно в обработчике
сообщения захотело какой-нибудь XML с диска прочитать да отпарсить - пользователь вместо
окна наблюдает белёсое бельмо и думает, что конкретные руки, это написавшие, надо отрывать
по самую задницу, из которой они растут.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39960983
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Большинство OS GUI - однопоточные.
Возможно IOS как то порешали этот вопрос,
Но я не специалист в них вообще. Пускай знающие откомментируют.
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39961145
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravКонкретно в чём проблема?

При открытии окна Windows посылает ему пачку сообщений, включая WM_SHOW,
WM_ERASEBACKGROUND и как последнее - WM_PAINT.
Вот это как раз и плохо.

Dimitry Sibiryakov
Приложение (по контракту) обязано эти
сообщения должным образом обработать в кратчайшие сроки . А если оно в обработчике
сообщения захотело какой-нибудь XML с диска прочитать да отпарсить - пользователь вместо
окна наблюдает белёсое бельмо и думает, что конкретные руки, это написавшие, надо отрывать
по самую задницу, из которой они растут.

По вашим рассуждениям выходит так, что Qt унаследовало архитектуру X-Windows, а в этой архитектуре необходимо в сообщении OnPaint обязательно парсить XML файлы или ещё что-то такое делать. Вот Qt портировали на Win, а от этой архитектурной особенности избавится не получилось. :)

Ну и я, конечно, в OnPaint парсю не только XML, но ещё и json!
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39961150
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Вот это как раз и плохо.

чем?
Вы на винду не гоните волну)))
а) нет фактов пока
б) paint винда никогда не гарантировала
с) есть ещё WM_ACTIVATE WM_SHOWWINDOW
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39961191
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravНу и я, конечно, в OnPaint парсю не только XML, но ещё и json!

Описанные симптомы соответствуют, виновный сознался, дело закрыто.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39961203
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А кто нибудь из присуствующих разрабатывал под Gnome/GTK+?
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39961204
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Gnome/GTK+
я под астрой
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39961207
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
mayton
Gnome/GTK+
я под астрой

Astra-Linux-ФСБ ?
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39961208
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там есть API для веб-камер или для стриминг-трансляций? Ну вобщем в этом направлении.
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39961227
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravНу и я, конечно, в OnPaint парсю не только XML, но ещё и json!

Описанные симптомы соответствуют, виновный сознался, дело закрыто.
всё же дело не в Qt, а в руках подозреваемого))
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39961256
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
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39961259
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Del.
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39961268
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 как такой универсальный комбайн для всего.
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39961278
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
VLC плеер бесплатно
https://www.videolan.org/vlc/download-debian.html
и VidBlaster (~300.000 рублей).
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39961336
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да VLC видит вебкамеру. Надо теперь попробовать постримить самому себе.
...
Рейтинг: 0 / 0
Переопределение QWidget::paintEvent() и мерцание при старте
    #39961341
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
40 сообщений из 40, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Переопределение QWidget::paintEvent() и мерцание при старте
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]