powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Переопределение QWidget::paintEvent() и мерцание при старте
25 сообщений из 40, страница 1 из 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
25 сообщений из 40, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Переопределение QWidget::paintEvent() и мерцание при старте
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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