【发布时间】:2011-07-08 21:02:03
【问题描述】:
我想在我的浏览器插件中使用 Qt,但我无法创建自己的窗口,浏览器可以。
我想做的是创建一个 QWidget 作为本机窗口句柄的子级...这可能吗?
【问题讨论】:
我想在我的浏览器插件中使用 Qt,但我无法创建自己的窗口,浏览器可以。
我想做的是创建一个 QWidget 作为本机窗口句柄的子级...这可能吗?
【问题讨论】:
如果您使用的是对话框而不是嵌入式窗口,则相对容易。在您的顶级小部件上调用 QWidget::winId()。在 Qt4 中,这将返回一个WId,它是HWND 的预处理器定义。在 Qt5 中,WId 是 HWND 的 typedef,因此您必须执行显式转换:
HWND hwnd = (HWND)widget->winId()
不幸的是,Qt5 中的功能目前不可靠/部分损坏。从 Qt 5.4.1 开始,它还没有解决,并且源代码中有一条注释指出 QWidget::winId() 正在“消失”。请注意,此问题主要影响 Qt 应用程序中的嵌入式本机窗口,反之亦然。你的里程可能会更好。
注意:QWidget::create() 用于在 Qt 中嵌入原生窗口。它可能不适用于您的情况。
【讨论】:
您可以通过在自定义小部件的构造函数中调用QWidget::create() 来接管本机窗口句柄。请注意,这是一个受保护的方法,因此您不能在普通的 QWidget 上调用它。
【讨论】:
仅当您可以将其转换为 QWidget 时。
【讨论】: