wpf - Qt QML 组件,如 WPF HwndHost

标签 wpf windows qt qml hwnd

我们有一个桌面 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/

相关文章:

.net - 如何使用 NavigationService 将对象传递给 ViewModel?

c# - 解决 CompositeCollection 中缺少分组的问题

android - 适用于 Android 和 OpenSSL 的 Qt

c++ - 如何向 QTableWidget 添加复选框/单选按钮

.net - WPF 数据绑定(bind)线程安全吗?

c# - 在设计时确定 WPF 控件的 DataContext

c++ - 如何让 _rmdir 删除的目录在 Windows 资源管理器中立即更新?

java - WINE可以在Linux下打开独立的Windows应用程序吗?

windows - Inno Setup 如何在任务栏菜单中隐藏 "pin"命令

multithreading - QtConcurrent 运行的线程 id