QQuickWidget和QQuickView

QQuickWidget与QQuickView的区别:

  • QQuickWidget的继承自QWidget,可以直接添加到Qt布局中;
  • QQuickView继承自QQuickWindow(继承自QWindow),通过转换才能添加到Qt布局中,代码如下
QQuickView *view = new QQuickView();
QWidget *widget = QWidget::createWindowContainer(view, this);
view->setSource(QUrl("qrc:/main.qml"));

 

QQuickWidget使用注意

  • QQuickWidget因涉及渲染到render到OpenGL帧缓冲区对象,会带来性能损失,导致较QQuickView性能稍低
  • QQuickWidget将禁用所有平台上的线程render loop,例如Animator类和vsync驱动的动画不能使用;
  • 避免在QQuickWidget上调用winId(),这个函数会触发本机窗口的创建,导致性能降低,并可能出现渲染问题;

 

适用情况

  • 如主体项目为QWidget,QML只作为辅助,如完成一下显示小动画之类,那么请选择QQuickWidget,可以更方便得与已有项目中的QWidget结合;
  • 如项目为全新,不涉及到QWidget的历史包袱,那么果断选择性能更好的QQuickView;

 

qml加载实例

// QQuickView - qml顶层不可为Window
QQuickView *view = new QQuickView();
view->setResizeMode(QQuickView::SizeRootObjectToView);
view->setSource(QUrl("qrc:/main.qml"));
// 以QWidget形式显示
QWidget *widget = QWidget::createWindowContainer(view, this);
widget->show();
// 以窗口形式直接显示
view.show ();


// QQuickWidget - qml顶层不可为Window
QQuickWidget *quickWidget = new QQuickWidget();
quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView);
quickWidget->setSource(QUrl("qrc:/main.qml"));


// QQmlApplicationEngine加载QML - qml顶层为Window
// 以Window为根对象的QML文件,这时QML就完全拥有了控制权,可以直接设置窗体的标题、尺寸等信息
QQmlApplicationEngine *engine = new QQmlApplicationEngine();
engine->load(QUrl(QStringLiteral("qrc:/main.qml")));

 

QML学习资料

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值