[转载]震惊!QWidget竟然可以嵌入到QML中,QMl窗口句柄竟然是这样获取 您所在的位置:网站首页 qwidget和qml混合编程 [转载]震惊!QWidget竟然可以嵌入到QML中,QMl窗口句柄竟然是这样获取

[转载]震惊!QWidget竟然可以嵌入到QML中,QMl窗口句柄竟然是这样获取

2023-03-25 08:34| 来源: 网络整理| 查看: 265

背景

    记得在初学qml时,就被大佬告知Qml的实现有两种方式“view+item”和“engine+widow”,那么能不能将QWidget嵌入到QML中来呢,我收到的答案是不可以,原因是QML的窗口句柄获取不到,但是,要想用原来的win32解码时就需要用到窗口句柄,但是我辛辛苦苦学的qml又不想放弃,于是就绞尽脑汁的找寻办法,终于,黄天不付有心人,在Google某个问题的时候,偶然间看到一个获取到qml窗口句柄的方法,于是就感觉自己找到了通向新世界的大门一样。

效果

  

整个窗口是qml的窗口,左边是我插入的QWidget,右边是我在Qml window上绘的Rectangle。

代码

main.cpp

int main(int argc, char *argv[]) { QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QApplication app(argc, argv);//因为要创建widget,只能使用QApplication QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); if (engine.rootObjects().isEmpty()) return -1; QObject *QmlObj=engine.rootObjects().first();//获取QMl的源对象 QWindow *QmlWindow=qobject_cast(QmlObj);//获取qml在的源窗口 QmlWindow->setTitle("闻天语");//设置一个窗口标签,确认自己拿到的窗口句柄就是自己想要的 WId parent_HWND = QmlWindow->winId(); //Qml窗口的句柄 QWidget Widget; //新建一个Widget Widget.setGeometry(0,0,180,180);//设置widget的大小 Widget.setStyleSheet("background-color: lightgray; color: naviy;");//设置风格,方便辨识 Widget.setProperty("_q_embedded_native_parent_handle",QVariant(parent_HWND));//给widget父对象句柄赋值 QLabel Label("this is Widget",&Widget); //在widget中添加一个标签 Label.setGeometry(0,0,140,40); //标签属性设置 QLineEdit Edit("",&Widget); //添加输入框 Edit.setGeometry(0,50,100,20); QPushButton Btn("send",&Widget); //添加按钮 Btn.setGeometry(100,100,60,20); Widget.winId();//必须调用,才能为widget创建句柄,否则将会失败 Widget.windowHandle()->setParent(QmlWindow);//同样是设置父窗口 Widget.show(); if(Widget.isModal())//判断是否是模态对话框 { qDebug()


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有