QWidget嵌入QML窗口中

来源:互联网 发布:网络改造设备 编辑:程序博客网 时间:2024/06/06 06:39

由于QWidget和QML窗口的渲染方式不一样,所以他们不能互相嵌入。

但有时候就是有这种需求:QML窗口需要嵌入到QWiget窗口中,或则是QWiget窗口需要嵌入到QML窗口中。

这个时候该怎么办呢?


我这里先记录如何将QWidget窗口嵌入到QML窗口中!

(原理:QML窗口其实是QWindow窗口,为了互通,需要把QWidget转换为QWindow)


先用Qt创建一个非常简单的QWiget窗口,界面如下:


我把这个界面类叫做Form类。


然后我们再创建一个QML文件,代码如下:

Window{    id: mainWindow    width: 600    height: 300    property alias titleBar: title    Rectangle    {        id:title        width: parent.width        height:25        color: "gray"        Text        {            anchors.centerIn: parent            text: "title: hello widget"            font.bold: true        }    }}

这段代码的运行结果如下:



接下来,将QWidget类型的Form对象添加到QML窗口中的空白区域:

    Form fm;    fm.setAttribute(Qt::WA_NativeWindow);    fm.windowHandle()->create();    fm.windowHandle()->setParent(mainWindow);    fm.show();    fm.move(0,25);

我们为Form创建了一个QWindow对象,并且把父窗口设置成了QML窗口,然后将窗口坐标设置成了(0,25)<因为标题栏高25px,如果不这样那么Form会挡住标题栏>

运行之后的效果如图:


这样就完成了QWiget到QML窗口的添加,但我们发现QWidget的没有和QML窗口尺寸相适应,

这个问题我们只需要重载Form的eventFilter函数,并且调用QML窗口的installEventFilter(Form*)然后在里面处理resize事件就好了!



以上就是QWidget嵌入QML窗口的示例!












原创粉丝点击