版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
将QML与QtWidgets相结合简述在使用QtWidgets时,经常要实现一些比较炫酷的效果(例如:滑动、翻页),这时选择QML会显得非常简单。那么,问题来了:能不能将QML和QtWidgets结合在一起使用?如果能,都有什么方式?QML和QtWidgets之间又该如何交互?|版权声明:一去、二三里,未经博主允许不得转载。一个简单的QML创建了一个简单的QML文件,用于显示一个绿色的矩形,其中包含一个文本。为了说明QML与QtWidgets的交互,在矩形中添加了两个信号。importQtQuick2.1Rectangle{id:rootcolor:"green"width:200height:200//发送给QtWidgets的信号signalqmlSignal//从QtWidgets接收到的信号signalcSignalText{id:myTexttext:"Clickme"font.pointSize:14anchors.centerIn:parent}MouseArea{anchors.fill:parentonClicked:qmlSignal()}//信号处理程序(处理从QtWidgets接收到的信号)onCSignal:{root.color="blue"myText.text="Calltheqmlsignalhandler"}}12345678910111213141516171819202122232425262728293031如果需要,可以将像往常一样使用qmlscene来运行。加载和显示QML要加载和显示QML,可以使用以下两种方式:QQuickWidgetQQuickView无论使用哪种方式,一旦主源文件的URL被指定,都将自动加载和显示QML视图。注意:在QML运行环境中,还介绍了另一种方式-QQmlEngine+QQmlComponent,但是这种方式不能以view的形式加载。使用QQuickWidgetQQuickWidget是Qt5.3中提供的一个类,继承自QWidget,它是QQuickWindow一个很方便的包装器,用于显示QtQuick用户界面。使用方式:QQuickWidget*view=newQQuickWidget;view->setSource(QUrl::fromLocalFile("myqmlfile.qml"));view->show();123使用QQuickViewQQuickView是Qt5.0中提供的一个类,继承自QQuickWindow(继承自QWindow),用于显示QtQuick用户界面。使用方式:QQuickView*view=newQQuickView;view->setSource(QUrl::fromLocalFile("myqmlfile.qml"));view->show();123可以看到,两者的使用方式几乎没什么区别。但是,QQuickWidget基于QWidget,而QQuickView基于QWindow,所以需要将其转换为QWidget,才能与QtWidgets相结合。这样,就需要再引入一个函数:[static]QWidget*QWidget::createWindowContainer(QWindow*window,QWidget*parent=Q_NULLPTR,Qt::WindowFlagsflags=Qt::WindowFlags())该函数用于创建一个QWidget,可以将window嵌入到基于QWidget的应用程序中。所以,要将QQuickView转为QWidget,可以使用下述方式:QQuickView*view=newQQuickView();QWidget*widget=QWidget::createWindowContainer(view,this);view->setSource(QUrl("qrc:/main.qml"));123将QML与QtWidgets相结合当一切准备就绪,就可以将QML与QtWidgets完美结合在一起了:最终效果:源码如下:#include"widget.h"#include<QQuickView>#include<QVBoxLayout>#include<QQuickWidget>Widget::Widget(QWidget*parent):QWidget(parent){resize(300,300);//方式一//QQuickView*pView=newQQuickView();//QWidget*pWidget=QWidget::createWindowContainer(pView,this);//pView->setResizeMode(QQuickView::SizeRootObjectToView);//pView->setSource(QUrl("qrc:/main.qml"));//方式二QQuickWidget*pWidget=newQQuickWidget();pWidget->setResizeMode(QQuickWidget::SizeRootObjectToView);pWidget->setSource(QUrl("qrc:/main.qml"));m_pButton=newQPushButton(this);m_pButton->setText("QtWidgets...");QVBoxLayout*pLayout=newQVBoxLayout();pLayout->addWidget(pWidget);pLayout->addWidget(m_pButton);pLayout->setSpacing(10);pLayout->setContentsMargins(10,10,10,10);setLayout(pLayout);//QML与QtWidgets通信//QObject*pRoot=(QObject*)pView->rootObject();QObject*pRoot=(QObject*)pWidget->rootObject();if(pRoot!=NULL){connect(pRoot,SIGNAL(qmlSignal()),this,SLOT(receiveFromQml()));connect(m_pButton,SIGNAL(clicked(bool)),pRoot,SIGNAL(cSignal()));}}voidWidget::receiveFromQml(){m
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2030年中国二甲基甲酰胺行业市场发展趋势与前景展望战略分析报告
- 2024-2030年中国丙亚胺行业发展现状与需求趋势预测研究报告
- 2024-2030年中国不锈钢电缆接头市场行情监测与未来前景展望报告
- 2024-2030年中国JK触发器行业发展趋势与前景规划调研研究报告
- 2024-2030年中国2,6-二氨基尿行业供需现状及前景竞争优势分析报告
- 2024年房地产销售述职报告模版(3篇)
- 2024至2030年中国智能养老行业商业模式创新与投资机会研究分析报告
- 2023年众筹项目综合评估报告
- 弘扬地方武术传统创建素质教育特色学校
- 干部选拔任用-试题及解答
- 2024-2025学年七年级道德与法治上册 第一单元 成长的节拍 第一课 中学时代 第2框《少年有梦》教学设计 新人教版
- 综合实践项目 制作细胞模型(课件) 2024-2025学年七年级生物上学期同步课件(2024人教版)
- 工业机器人离线编程与应用-认识FANUC工业机器人
- 2024-2025学年第一学期1年级上册语文教学计划及进度表(新教材)
- 湖北省孝感市安陆市2023-2024学年八年级下学期期末物理试题(解析版)
- 第17课 第二次世界大战(教学设计)-【中职专用】《世界历史》
- 2024年沈阳市卫生和生育委员会事业单位招考易考易错模拟试题(共500题)试卷后附参考答案
- YYT 0971-2016 放射治疗用多元限束装置性能和试验方法
- 盐业代理合同范本
- 2024年公需课枣庄市继续教育人社局题库及答案18套题合集
- 网络安全设备巡检记录表
评论
0/150
提交评论