widget中调用qml

1.如果已经拥有一个基于Qwidget的用户界面,可以使用QDeclareativeView将QML部件整合进来,QDeclareativeView是Qwidget的子类,所以可以像其他QWidget部件一样将其添加到用户界面中去,使用QDeclareativeView::setSource()来加载一个QML文件到视图中,然后将该视图添加到用户界面中,下面来看一个例子。

新建一个新的Qwidget项目,并向项目中添加新的文件application.qml文件,并将其内容更改如下:

import QtQuick1.0

 
Rectangle {
    id:mainRect;
    width: 300;
    height: 200
    anchors.centerIn: parent;
    color: "red";
 
    Text{
        anchors.centerIn: parent;
        text:"my head is big";
        font.pixelSize: 23;
        z:1
    }
    Rectangle{
        width: 100;
        height: 100;
        anchors.top:mainRect.top;
        anchors.left: mainRect.left;
        anchors.topMargin: 20;
        anchors.leftMargin: 20;
        z:0.5;
        color:"blue";
    }
 
}
这样便创建了一个基于QWidget的视图来显示application.qml文件的内容。最后还要在项目文件中添加如下代码:
QT       +=declarative
也就是说,必须添加declaration模块才可以在Qt程序中显示QML文件的内容。
在main.c文件中的代码如下:
#include "mainwindow.h"
#include <QApplication>
#include <QtDeclarative/QDeclarativeView>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
//    MainWindow w;
//    w.show();
    QDeclarativeView view;
    view.setSource(QUrl("../ym/application.qml"));
    view.show();
    return a.exec();
}
必须要添加包含QtDeclarative文件。然后这样就能调试运行了。但是使用这种方式的一个缺点就是:与QWidget相比,QDeclareativeView初始化很慢,而且会使用更多的内存如果创建大量 的QDeclareativeView对象会导致性能下降,如果发生了这种情况,一个比较好的方法是在QML中重写这些部件,然后在主QML部件中加载这些部件,而不要使用QDeclareativeView。注意,与QML相比QWidget是为多种不同类型的用户界面设计的,所以将基于QWidget的应用程序和QML相连接并不总是一个好主意。如果用户界面是由少量复杂的静态元素组成的,那么最好使用QWidget部件来实现,而如果用户界面是由大量简单的和动态的元素组成,那么最好使用QML来实现。在说一句,如果在application.qml中没有包含任何图形组件,或者由于其他原因需要避免使用QDeclareativeView,那么就可以直接创建QDeclarativeEngine。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值