LINUX.ORG.RU

История изменений

Исправление robus, (текущая версия) :

Вот это вопрос!!! Как подписаться на событие/сигнал у чистых Qt (культей)?

Я сделал так:

//...
bool KawaiiSurface::eventFilter(QObject *obj, QEvent *event)
{
  if(obj != wnd)
    return false;

  switch (event->type()) {
    case QEvent::UpdateRequest:
    case QEvent::Expose:
      if(wnd->isExposed())
        wnd->requestUpdate();
      break;

    case QEvent::Resize:
      onSfcResized(static_cast<QResizeEvent*>(event)->size());
      break;

    default: break;
    }
  return false;
}
//...

Далее в рендере тоже есть eventFilter:

//...
bool MisakaSurfaceCtrl::eventFilter(QObject *obj, QEvent *event)
{
  if(model && obj == model->getWindow() && event->type() == QEvent::UpdateRequest)
    render();

  return false;
}
//...
И KawaiiSurface и MisakaSurfaceCtrl устанавливаются в качестве eventFiltr-ов для окошка (объект класса QWindow или производного), в которое рендерим сцену.

Нет, нашел, но только в контексте OGL. Так что, другого варианта синкаться с рефреш рейт нет?

Не распарсил.

Исправление robus, :

Вот это вопрос!!! Как подписаться на событие/сигнал у чистых Qt (культей)?

Я сделал так:

//...
bool KawaiiSurface::eventFilter(QObject *obj, QEvent *event)
{
  if(obj != wnd)
    return false;

  switch (event->type()) {
    case QEvent::UpdateRequest:
    case QEvent::Expose:
      if(wnd->isExposed())
        wnd->requestUpdate();
      break;

    case QEvent::Resize:
      onSfcResized(static_cast<QResizeEvent*>(event)->size());
      break;

    default: break;
    }
  return false;
}
//...

Далее в рендере тоже есть eventFilter:

//...
bool MisakaSurfaceCtrl::eventFilter(QObject *obj, QEvent *event)
{
  if(model && obj == model->getWindow() && event->type() == QEvent::UpdateRequest)
    render();

  return false;
}
//...
И KawaiiSurface и MisakaSurfaceCtrl устанавливаются в качестве eventFiltr-ов для окошка, в которое рендерим сцену.

Нет, нашел, но только в контексте OGL. Так что, другого варианта синкаться с рефреш рейт нет?

Не распарсил.

Исходная версия robus, :

Вот это вопрос!!! Как подписаться на событие/сигнал у чистых Qt (культей)?

Я сделал так:

//...
bool KawaiiSurface::eventFilter(QObject *obj, QEvent *event)
{
  if(obj != wnd)
    return false;

  switch (event->type()) {
    case QEvent::UpdateRequest:
    case QEvent::Expose:
      if(wnd->isExposed())
        wnd->requestUpdate();
      break;

    case QEvent::Resize:
      onSfcResized(static_cast<QResizeEvent*>(event)->size());
      break;

    default: break;
    }
  return false;
}
//...

Далее в рендере тоже есть eventFilter:

//...
bool MisakaSurfaceCtrl::eventFilter(QObject *obj, QEvent *event)
{
  if(model && obj == model->getWindow() && event->type() == QEvent::UpdateRequest)
    render();

  return false;
}
//...
И KawaiiSurface и MisakaSurfaceCtrl устанавливаются в качестве eventFiltr-ов для окошка, в которое рендерим сцену.

Нет, нашел, но только в контексте OGL. Так что, другого варианта синкаться с рефреш рейт нет?

Не распарсил.