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

发布于 2024-10-20 20:13:34 字数 91 浏览 4 评论 0原文

我想在浏览器插件中使用 Qt,但我无法创建自己的窗口,而是浏览器创建。

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

I'd like to use Qt in my browser plugin, but I don't get to create my own window, the browser does.

What I'd like to do is create a QWidget as a child of a native window handle... Is this possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

漫雪独思 2024-10-27 20:13:34

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

You may be able to take over a native window handle by calling QWidget::create() in your custom widget's constructor. Note that it's a protected method so you can't call it on a normal QWidget.

痴梦一场 2024-10-27 20:13:34

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

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

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

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

If you're using a dialog and not an embedded window it's relatively easy. Call QWidget::winId() on your top-level widget. In Qt4 this will return a WId, which is a preprocessor definition for HWND. In Qt5, WId is a typedef for HWND, so you have to perform an explicit cast:

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

Unfortunately, the functionality in Qt5 is currently unreliable/partially broken. As of Qt 5.4.1, it's not resolved and there's a note in the source that QWidget::winId() is "going away". note that this issue primarily affects embedded native windows in a Qt app, not vice versa. Your mileage may be better.

Note: QWidget::create() is intended for embedding native windows in Qt. It probably does not apply in your situation.

兮颜 2024-10-27 20:13:34

仅当您可以将其转换为 QWidget 时。

Only if you can cast it as a QWidget.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文