类似于WPF HwndHost的Qt QML组件

4
我们有一个桌面Windows应用程序,使用一个需要HWND来显示的组件。在WPF应用程序中,我们使用HwndHost来显示它。我们正在尝试制作一个基于Qt QML的应用程序来完成相同的操作。
能否在QML应用程序中托管HWND组件?
它可以在QQuickWindow中工作,但我附加的控件占据了整个窗口应用区域。我想要绑定到一个较小的区域,比如下面的QML中的rectArea。但是QQuickItem没有windId(),只有它的父级window()。这有可能吗? 以下是我的QML:
ApplicationWindow {
  width: 640
  height: 480
  visible: true
  Rectangle {
    objectName: "rectArea"
    id: rectangle1
    x: 0
    y: 0
    width: 200
    height: 200
    color: "#ffffff"
 }
}

这里是一个 C++ 代码片段:

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...
}

这是一个有趣的问题。你能告诉我们你最终是如何解决的吗? - ceztko
2个回答

2

如果您有一个QWindow(或者任何从它继承的东西),您可以通过调用winId方法来获取HWND。您需要像这样进行类型转换:

```cpp HWND hwnd = reinterpret_cast(window->winId()); ```
QWindow pWindow;
// create pWindow
HWND hWnd = reinterpret_cast<HWND>(pWindow->winId());

0
一个 矩形 没有自己的 HWND。你只能检索整个窗口的 HWND。你必须限制自己在矩形区域内,例如当托管一个 OpenGL 应用程序时:
 glViewport(x(), windowHeight - y() - height(), width(), height());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接