我们有一个桌面 Windows 应用程序,它使用需要显示 HWND
的组件。在 WPF 应用程序中,我们使用 HwndHost
来显示它。我们正在尝试制作一个基于 Qt QML 的应用程序来做同样的事情。
是否可以在 QML 应用程序中托管 HWND
组件?
它与 QQuickWindow
一起工作,但我附加的控件占据了整个窗口应用程序区域。我想绑定(bind)到一个较小的区域,比如下面 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 片段:
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());
关于wpf - Qt QML 组件,如 WPF HwndHost,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29954733/