【发布时间】:2015-04-29 21:16:22
【问题描述】:
我们有一个桌面 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"
}
}
这里是一个 cpp sn-p:
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...
}
【问题讨论】:
-
这是一个有趣的问题。您能告诉我们您最终是如何解决的吗?