是否可以将QWidget声明为在Qt之外创建的窗口的子项?

时间:2011-03-04 14:27:23

标签: qt window native handle

我想在我的浏览器插件中使用Qt,但是我没有创建自己的窗口,浏览器也是如此。

我想要做的是创建一个QWidget作为本机窗口句柄的子项......这可能吗?

3 个答案:

答案 0 :(得分:4)

您可以通过在自定义窗口小部件的构造函数中调用QWidget::create()来接管本机窗口句柄。请注意,它是受保护的方法,因此您无法在正常QWidget上调用它。

答案 1 :(得分:0)

如果您使用的是对话框而不是嵌入式窗口,则相对容易。在您的顶级窗口小部件上调用QWidget::winId()。在Qt4中,这将返回WId,这是HWND的预处理器定义。在Qt5中,WIdHWND的typedef,因此您必须执行显式转换:

HWND hwnd = (HWND)widget->winId()

不幸的是,Qt5中的功能目前不可靠/部分损坏。从Qt 5.4.1开始,它没有得到解决,并且源中有一条注释QWidget::winId()正在“消失”。请注意,此问题主要影响Qt应用程序中的嵌入式本机窗口,反之亦然。你的里程可能会更好。

注意:QWidget::create()用于在Qt中嵌入本机窗口。它可能不适用于您的情况。

答案 2 :(得分:-1)

只有你可以把它作为QWidget投射。