posts - 319, comments - 22, trackbacks - 0, articles - 11
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

QML与现有Qt UI代码的整合

Posted on 2011-08-04 22:38 RTY 阅读(2652) 评论(0)  编辑 收藏 引用 所属分类: 转载随笔QML

请尊重原创作品和译文。转载请保持文章完整性,并以超链接形式注明原始作者地址http://blog.csdn.net/changsheng230,方便其他朋友提问和指正。

将QML整合到基于QWidget UI程序的方法有很多种,而具体采用哪种方法取决于现有UI代码的特性。

与基于QWidget的UI整合

如果你已经有了一个基于QWidget的UI,QML widgets可以使用QDeclarativeView来进行集成。QDeclarativeView是QWidget的一个子类,所以你可以像加载其他QWidget一样把它加载进你的UI。 具体方法是使用QDeclarativeView::setSource()方法加载一个QML文件到视图中,然后将这个视图(即QDeclarativeView)加到你的UI中。

  1. QDeclarativeView *qmlView = new QDeclarativeView;  
  2. qmlView->setSource(QUrl::fromLocalFile("myqml.qml"));  
  3.   
  4. QWidget *widget = myExistingWidget();  
  5. QVBoxLayout *layout = new QVBoxLayout(widget);  
  6. widget->addWidget(qmlView);  

这种方法的缺点在于与QWidget相比,QDelarativeVeiw的初始化过程更慢,而且使用更多的内存。如果创建大量的QDelarativeVeiw对象可能会导致性能的下降。在这种情况下,更好的选择是用QML重写你的widgets,使用main QML widget来加载widget, 从而替代QDelarativeVeiw的滥用。

请注意,QWidgets的UI设计理念与QML并不相同,所以将基于QWidget的应用移植到QML并不总是一个好主意。如果你的UI是由少数几个复杂、静态的元素的组成,使用QWidgets是一个更好的选择。而如果你的UI是由大量简单、动态的元素组成,那么QML则是你的最佳选择。

与基于QGraphicsView的UI整合

将QML widgets加入到QGraphicsScene

如果你已经有了一个基于Graphics View Framework的UI,你可以直接将QML widgets集成到你的QGraphicsScene中。具体方法是使用QDeclarativeComponent 从QML文件中创建一个QGraphicsObject,并通过使用QGraphicsScene::addItem(), 方法把这个图形对象加到你的scene中,或者将其父化到已经存在与QGraphicsScene的组件中。举例说明:

>

  1. QGraphicsScene* scene = myExistingGraphicsScene();  
  2. QDeclarativeEngine *engine = new QDeclarativeEngine;  
  3. QDeclarativeComponent component(engine, QUrl::fromLocalFile("myqml.qml"));  
  4. QGraphicsObject *object =  
  5.     qobject_cast(component.create());  
  6. scene->addItem(object);  

推荐使用下面的一些QGraphicsView选项来优化QML UIs的性能:

在QML中加载QGraphicsWidget 对象

另一个可供选择的方法是将你现有的QGraphicsWidget 对象暴露给QML,并且在QML中构建你的scene。请参见图形布局示例,它展示了如何结合QGraphicsWidget 、QGraphicsLinearLayout 以及QGraphicsGridLayout的使用,将Qt图形布局类暴露给QML。

为了将现有的QGraphicsWidget类暴露给QML,需使用qmlRegisterType()。在QML中使用C++型别的进一步信息,请参见在C++中拓展QML。 (译者注:也看参阅QML与C++混合编程使用)

英文原文出处:integrating QML with existing Qt UI code


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理