QWidget中嵌入win32 window(使用QWindow和QWidget::createWindowContainer)

24 篇文章 0 订阅

主要用到QWindow::fromWinId和QWidget::createWindowContainer这两个函数

      QWindow::fromWinId用来创建一个win32窗口的代理 
      QWidget::createWindowContainer用来把窗口封装为一个QWidget控件

 

示例代码

    HWND hwnd = ::FindWindow(L"CEFWebkitBrowserWnd", NULL);
    QWindow* native_wnd  = QWindow::fromWinId((WId)hwnd);
    QWidget* native_wdgt = QWidget::createWindowContainer(native_wnd);

    centralWidget ->addSubWindow(native_wdgt);
    native_wdgt->setMinimumSize(600,400);

图示

参考:

https://www.yuque.com/docs/share/50c0ff27-0e2a-4e65-95c0-b70700ba4b19

 

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`QWidget::createWindowContainer` 是一个静态函数,用于将 QWidget 转换为一个可以嵌入到其他窗口系统的窗口容器。它的函数原型如下: ```cpp QWidget *QWidget::createWindowContainer(QWidget *widget, QWidget *parent = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags()); ``` 其,`widget` 是要转换的 QWidget 对象,`parent` 是容器的父窗口,如果没有指定,就会创建一个新的顶级窗口作为父窗口;`flags` 是容器的标志,它是一个按位或的枚举值,可以用来设置容器的各种属性,比如窗口样式、窗口标题等等。 使用 `createWindowContainer` 函数可以将一个 QWidget 对象转换为一个 `QWindow` 对象,从而可以将它嵌入到其他窗口系统,比如 Qt Quick 的 Item 或 QML Window。以下是一个简单的示例代码: ```cpp // 创建一个 QWidget 对象 QWidget *myWidget = new QWidget(); // 将 QWidget 转换为 QWindow,并将它嵌入到一个 QML 窗口 QQuickView *qmlView = new QQuickView(); QWindow *qmlWindow = qmlView->rootObject(); QWidget *container = QWidget::createWindowContainer(myWidget, qmlWindow); qmlView->setContent(container); qmlView->show(); ``` 在这个例子,我们首先创建了一个 QWidget 对象 `myWidget`,然后将它转换为一个 QWindow,并将它嵌入到一个 QML 窗口。最后,我们通过 `qmlView->setContent(container)` 将 QML 窗口的内容设置为容器,从而实现了将 QWidget 嵌入到 QML 窗口的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值