Qt小部件与QML混合在一起

时间:2014-12-12 09:06:50

标签: qt widget overlay qml

我想使用两个小部件(一次一个)作为我的应用程序的基础/背景,顶部有一个QML UI和一个无边框窗口。它应该是这样的:

layout http://fs1.directupload.net/images/141211/cruvrltu.png

  1. 基于OpenGL的扫描组件
  2. 通过窗口句柄操作的3D可视化组件
  3. 多个QML UI组件作为叠加层(可能是可拖动的)
  4. QML侧边栏组件
  5. 我已成功将组件1包含到QGLWidget中,并在其上显示QML组件。工作没有问题。

    但是,我无法使组件2工作。如果我将它包含在顶级QWidget中并使用其winId来访问句柄,我可以轻松完成。不幸的是,我无法在此基础上进行构建。我经历了几个选项,但它们似乎都不够:

    • 如果我采用QWidget方式,则组件位于顶部,QML组件无法覆盖。
    • 我尝试使用QGraphicsProxyWidget,但它只显示一个空的灰色小部件。
    • 我读到新的(呃)方法是使用基于QWidget的应用程序并使用QtQuick2进行叠加。但同样,它似乎只适用于基于OpenGL的组件。
    • 可能还有使用QQuickWidget和QOpenGLWidget的选项,可在Qt 5.3和5.4中找到,但我不知道如何以及它是否有效,因为我没有看到任何符合我目的的例子。
    • 还可以选择QWidget::createWindowContainer,但不允许(透明)重叠。

    我的问题是,我不知道如何使用QML覆盖非GL小部件,然后知道如何将所有内容包含到一个应用程序中(当在两个小部件之间切换时,setViewport可能存在父问题)。有没有人做过这个或者可以指出可能显示结果的方向?

    我正在使用Qt 5.2.1,VS2012和针对x64(需求)构建,针对Windows桌面。

    拥有一个高性能的解决方案当然是好的,可能基于QtQuick2,但是我很遗憾,我会接受任何至少会让它暂时起作用的东西。

1 个答案:

答案 0 :(得分:2)

最后,我使用QWindow,使用其窗口句柄来集成3D可视化,然后将其与QQuickView组件(QWindow作为父组件)重叠。该解决方案的唯一缺点是它不允许透明。