除非我移动窗口,否则窗口不会更新

时间:2015-07-01 12:09:12

标签: c++ windows qt directx-11 qt5.4

好的,所以当我在度假时,我正在使用我的笔记本电脑,我决定从Win32 API转移到Qt,一切正常。直到我回到我的电脑上,就是这样。这个问题只发生在我的电脑而不是我的笔记本电脑上我使用了win merge来尝试检测任何差异并且没有。

我实现这个的方式是我有一个从QWidget派生的GameView类,我已经覆盖了paintEngine函数什么都不做,我将DirectX HWND设置为游戏视图QWidget的WId。

非常感谢对此的任何帮助

在初始化期间调用此方法来创建窗口

bool Engine::CreateDisplay()
{
m_pQtApp = new QApplication(m_nArgCount, m_pArgV);

m_pGameWindow = new GameWindow(this);
m_pGameWindow->show();

m_pGameView = new GameView(this);
m_pGameView->setParent(m_pGameWindow);
m_pGameView->show();
m_pGameView->resize(800, 600);
m_pGameWindow->setCentralWidget((QWidget*)m_pGameView);

return true;
}

然后,一旦所有内容都被初始化,这就被称为

int Engine::StartGameLoop()
{
m_bIsRunning = true;
m_pCurrentWorld->BeginPlay();

//MSG msg {};
while(m_bIsRunning)
{
    /*if(PeekMessage(&msg, m_hWnd, 0, 0, PM_REMOVE))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }*/
    m_pQtApp->processEvents();

    if(m_bIsRunning)
    {
        //m_pGameView->update();
        Update();
        Render();
    }
}

m_pCurrentWorld->EndPlay();

return 0;
}

这是我修改的调整大小事件

void GameView::resizeEvent(QResizeEvent* pEvent)
{
if(m_pEngine->GetGraphics())
    m_pEngine->GetGraphics()->SetResolution(pEvent->size().width(), pEvent->size().height());

//QWidget::resizeEvent(pEvent);
}

0 个答案:

没有答案