【问题标题】:Architecture Difference using DirectX and a Qt Widget -- Works one way but not another使用 DirectX 和 Qt Widget 的架构差异——以一种方式工作,但不是另一种方式
【发布时间】:2012-03-01 00:19:43
【问题描述】:

我有以下结构,可以使用 QtSDK vs 4.8 将直接 x 场景渲染到 Qt Widget。

main.cpp---->QGraphicsView---->QGraphicsScene
|
V
DXWidget(override paint engine, contains a d3d9device)

现在我不想决定在我的主要功能中使用这两种设备中的哪一种,因此我提出了以下架构。

main.cpp
|
V
MyMainWindow (inherits from QMainWindow)-->GLWidget-->GraphicsView-->GraphicsScene
|
V
DXWidget (contains a DX Device)

现在 OpenGL 渲染周期仍然有效;但是 DirectX 渲染周期在使用此架构时不起作用。屏幕现在呈现为灰色。我认为可能是因为我没有覆盖MyMainWindow中的paintEngine()方法所以我在MyMainWindow中添加了以下逻辑。

QPaintEngine *TFWMainWindow::paintEngine()
{
#ifdef WIN32
    if (m_renderMode == DIRECTX)
        return NULL;
    else if (m_renderMode == OPENGL)
        QMainWindow::paintEngine();
#elif __linux__
    QMainWindow::paintEngine();
#endif
}

但是,这仍然没有帮助。 OpenGL 仍然使用 Qt 的图形场景和图形视图进行渲染,但是 DirectX 仍然无法正确渲染。我的 WidgetDX 上也有 paintEngine() 重载,但它不起作用。关于如何让 DirectX 在新架构下工作有什么想法吗?

【问题讨论】:

    标签: c++ qt directx


    【解决方案1】:

    我必须将 virtual 和 const 添加到 painEngine()

    即:

    virtual PaintEngine* paintEngine(...) const
    {
       return NULL;
    }
    

    您只需在小部件级别执行此操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-23
      • 2018-02-11
      相关资源
      最近更新 更多