Qt QML组件,如WPF HwndHost

我们有一个桌面Windows应用程序,它使用需要显示HWND的组件.在WPF应用程序中,我们使用HwndHost来显示它.我们正在努力使基于Qt QML的应用程序也这样做.

是否可以在QML应用程序中托管HWND组件?

它适用于QQuickWindow,但我附加的控件占用整个窗口应用程序区域.我想绑定到一个较小的区域,如下面的QML中的rectArea.但是QQuickItem没有windId(),只有它的父窗口().有可能的?
这是我的QML:

ApplicationWindow {
  width: 640
  height: 480
  visible: true
  Rectangle {
    objectName: "rectArea"
    id: rectangle1
    x: 0
    y: 0
    width: 200
    height: 200
    color: "#ffffff"
 }
}

这里有一个cpp片段:

void setHwnd(QQmlApplicationEngine& m_engine) {
  auto root_objects = m_engine.rootObjects();
  m_rootObject = root_objects[0];
  auto rect_area = m_rootObject->findChild<QQuickItem*>("rectArea");
  HWND hWnd = reinterpret_cast<HWND>(rect_area->window()->winId());
  // use hWnd here, but it takes the entire window area...
}
最佳答案
一旦你有了一个QWindow(或从它继承的任何东西),你可以通过调用winId方法获得HWND.你需要像这样对它进行类型转换:

QWindow pWindow;
// create pWindow
HWND hWnd = reinterpret_cast<HWND>(pWindow->winId());

转载注明原文:Qt QML组件,如WPF HwndHost - 代码日志