Редактор irrlicht с помощью qt

Я хочу написать свой собственный редактор сцены irrlicht с QT.

Я создаю класс QIrrlichtWidget, который является производным от QWidget, и переопределяю метод "paintEvent", чтобы запустить цикл рисования Irrlicht.

//.h

class QIrrlichtWidget : public QWidget
{
signals:
    void updateIrrlicht(  );

public slots:
    void autoUpdateIrrlicht();

protected:
    virtual void paintEvent ( QPaintEvent * event );    
}

//.cpp

QIrrlichtWidget::QIrrlichtWidget(QWidget *parent) : QWidget(parent)
{
    connect( this, SIGNAL(updateIrrlicht()), this, SLOT(autoUpdateIrrlicht()) );
}

void QIrrlichtWidget::paintEvent(QPaintEvent *event)
{
    if ( m_device )
    {
        emit updateIrrlicht( m_device );
    }
}

void QIrrlichtWidget::autoUpdateIrrlicht()
{
    if(m_device->run())
    {
        m_device->getTimer()->tick();
        m_driver->beginScene(true, true, irr::video::SColor(255,125,0,0));
        m_scene->drawAll();
        m_guienv->drawAll();
        m_driver->endScene();
    }
}

но QT выдает исключение "QWidget::repaint: Recursive repaint found".

поэтому я использую таймер Qt, чтобы избежать использования paintEvent.

QIrrlichtWidget::QIrrlichtWidget(QWidget *parent) : QWidget(parent)
{
    connect( this, SIGNAL(updateIrrlicht()), this, SLOT(autoUpdateIrrlicht()) );

     startTimer(0);
}

void QIrrlichtWidget::timerEvent(QTimerEvent * event)
{
    if ( m_device )
    {
        emit updateIrrlicht( m_device );
    }
    event->accept();
}

Это хорошо работает. Но есть еще проблемы. Когда я передаю события мыши QT в движок irrlicht и управляю объектами в сцене irrlicht, пользовательский опыт слишком плохой. Есть некоторые задержки, которые нельзя допустить.

Итак, есть ли у кого-нибудь хорошие идеи для решения проблемы?

0 ответов

Другие вопросы по тегам