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。