qt-ui和QML整合

更新时间:2023-11-18 11:19:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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

与基于QWidget的UI整合

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

1. QDeclarativeView *qmlView = new QDeclarativeView; 2. qmlView->setSource(QUrl::fromLocalFile(\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的组件中。举例说明: > view plain

1. QGraphicsScene* scene = myExistingGraphicsScene(); 2. QDeclarativeEngine *engine = new QDeclarativeEngine;

3. QDeclarativeComponent component(engine, QUrl::fromLocalFile(\4. QGraphicsObject *object =

5. qobject_cast(component.create()); 6. scene->addItem(object);

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

? ? ? QGraphicsView::setOptimizationFlags(QGraphicsView::DontSavePainterState) QGraphicsView::setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate) QGraphicsScene::setItemIndexMethod(QGraphicsScene::NoIndex) 在QML中加载QGraphicsWidget 对象 另一个可供选择的方法是将你现有的QGraphicsWidget 对象暴露给QML,并且在QML中构建你的scene。请参见图形布局示例,它展示了如何结合QGraphicsWidget 、QGraphicsLinearLayout 以及QGraphicsGridLayout的使用,将Qt图形布局类暴露给QML。 为了将现有的QGraphicsWidget类暴露给QML,需使用qmlRegisterType()。在QML中使用C++型别的进一步信息,请参见在C++中拓展QML。 (译者注:也看参阅QML与C++混合编程使用)

本文来源:https://www.bwwdw.com/article/ihtv.html

Top