Russian Qt Forum

Qt => Общие вопросы => Тема начата: Igors от Апрель 05, 2022, 13:33



Название: Индикатор "Drawing Objects"
Отправлено: Igors от Апрель 05, 2022, 13:33
Добрый день

По каким-то причинам окно индикатора не показывается, а если было показано "до того" - не обновляется. Сама операция - рисование OpenGL (стандартно, через paintGL), как говорят, "по идее" такой проблемы быть не должно. Заграбастал буфер окна в файл (через QBackingStore) там все норм, обновлено. А вот на экране - тишина.

По ходу дела вопрос: ну вот сделали Qevent::UpdateRequest, он позвал Paint(ы), буфер готов, кто (или как, или в какой момент) его шлепает на экран? (хотя бы на OSX)

Спасибо


Название: Re: Индикатор "Drawing Objects"
Отправлено: sergek от Апрель 05, 2022, 20:38
Может, QApplication::processEvents() ?


Название: Re: Индикатор "Drawing Objects"
Отправлено: kambala от Апрель 05, 2022, 23:22
в cocoa нативный способ заставить вью перерисоваться — послать ему -setNeedsDisplay, что в свою очередь вызовет -drawInRect:


Название: Re: Индикатор "Drawing Objects"
Отправлено: Igors от Апрель 06, 2022, 12:59
Может, QApplication::processEvents() ?
Так и делаю, другого просто нет. Потом отслеживаю приходящие события. Все одинаково - вызывается UpdateRequest, из него Paint(ы), создается верный буфер. Но при обновлении из paintGL - экран не обновлен. Долго ползал в хвосте UpdateRequest, где зовутся ф-ции типа flush - тоже все одинаково.

в cocoa нативный способ заставить вью перерисоваться — послать ему -setNeedsDisplay, что в свою очередь вызовет -drawInRect:
Ну это вызов Paint, т.е. кода рисования, эта фаза проходит


Название: Re: Индикатор "Drawing Objects"
Отправлено: Igors от Апрель 07, 2022, 11:05
Продолжаю копаться. Собсно обновление (что становится видным на экране) происходит "в недрах", см аттач. Понял так это системное событие OSX недоступное из Qt напрямую. Поэтому в Qt+OSX я никак не могу "чего-то вызвать" - и экран обновлен, обязательно нужен processEvents. Ну и шо делать?