杂烩:QWidget、QGraphics、QtQuick
一说起Qt 大都会想起Qt的GUI编程,具体到某个类的话,最多的就是QWidget类及其子类了。
其实Qt中还有基于项的图形视图,具体来说QGraphicsView,QGraphicsScene,QGraphicsItem三个类了。
看看这个文章关于QGraphics*
和QWidget比较,QGraphics有什么不同呢?
主要在如下方面吧:
1.QGraphics*类可以设置rotation,但是QWidget不行。
2.基于上述原因,QWidget在移动设备上(分横竖屏)就不能很好的适应屏幕的方向
3.由于是基于项的图形视图,管理一个个QGraphicsItem变得十分容易,可以在一个Scene中管理成百上千的视图项
4.qml是基于QGraphics的(Qt4&5),而qml已经成为Qt未来发展的趋势(将类注册到脚本环境中,在脚本环境中被管理和动态创建)
但QGraphics中没有像QWidget类那样有丰富的控件。而且将QWidget进行重写,变成QGraphics类不是那么明智,基于此,QGraphics是支持将QWidget添加到他的视窗体系的。
QGraphicsProxyWidget 类
从QGraphicsView获取当前的QGraphicsScene,然后调用QGraphicsScene::addWidget(QWidget *) ,这个函数将一个你想要添加的QWidget添加到视图系统中,并返回一个QGraphicsProxyWidget 对象指针,通过QGraphicsProxyWidget 对象可以设置QWidget的rotation,transfrom等等QGraphicsItem专有的属性
好了说了这么多,其实我想说的是QtQuick 的原c++类是QDeclarative* ,而QDeclarative*主要继承自对应的QGraphics*类,这也说明了QtQuick是基于项的视图系统。
然后,你就可以将之前的编写好的QWidget*类的控件注册到qml中,再以脚本的方式动态创建。这样的话,qml的拓展机制实在是太变态了(得益于Qt的元对象系统)。
没有图你说个****啊~
关于代码和实例明天在上传吧~
后记:其实QtQuick是Qt发展的产物,Qt的QGraphics*视图以及QStyle(qss)其实就是QtQuick的雏形了,而动态脚本编程越来越受欢迎,QtQuick(qml)成为Qt未来的趋势也是理所当然的。关于脚本的执行效率,总是会解决的。这不,Qt公司推出了QtQuick Compiler
参考:http://blog.csdn.net/qyvlik/article/details/42268501
杂烩:QWidget、QGraphics、QtQuick的更多相关文章
- 该用 QGraphicsView ? QtQuick-QML ?
目前QtQuick (2014/3/6) 已经发展了有一段时间了,很多人在用因此我也想看看是否适合我目前的项目. 我要做的是一个类似3DMax中的材质编辑器的东西,里面有成千上万的”表单“(不知道怎么 ...
- QML 信号与响应方法的总结
以下内容为本人的著作,如需要转载,请声明原文链接微信公众号「englyf」https://www.cnblogs.com/englyf/p/16748191.html 如果面试过程中,面试官想了解你对 ...
- QGraphics
QGraphicsView和QGraphicsScene QGraphicsScene提供一个场景,可以添加各种item,QGraphicsView用于将元素显示,并支持旋转和缩放:可以将QGraph ...
- [转载]震惊!QWidget竟然可以嵌入到QML中,QMl窗口句柄竟然是这样获取
背景 记得在初学qml时,就被大佬告知Qml的实现有两种方式“view+item”和“engine+widow”,那么能不能将QWidget嵌入到QML中来呢,我收到的答案是不可以,原因是QML的 ...
- QDialog QMainwindow QWidget QFrame不同时候用法.
继承关系:在Qt中所有的类都有一个共同的基类QObject ,QWidget直接继承与QPaintDevice类,QDialog.QMainWindow.QFrame直接继承QWidget 类. ...
- MainWindow、QWidget和QDialog的区别和选择(转载)
QApplication类用于管理应用程序范围内的资源,其构造函数需要main函数的argc和argv作为参数. Widget被创建时都是不可见的,widget中可容纳其他的widget. Qt中的w ...
- QWidget 实现 打破布局 或者 当前窗体内的 弹窗 (借助伪造实现)
but = QtWidgets.QToolButton(Dialog2) but.setText('**') but.setAutoRaise(True) layout.addWidget(but) ...
- [转载] - QWidget、QMainWindow、QDialog和QFrame的区别
继承关系:在Qt中所有的类都有一个共同的基类QObject ,QWidget直接继承与QPaintDevice类,QDialog.QMainWindow.QFrame直接继承QWidget 类. ...
- QWidget 键盘事件 焦点(QApplication源码)
在Qt中,键盘事件和QWidget的focus密不可分:一般来说,一个拥有焦点(focus)的QWidget或者grabKeyboard()的QWidget才可以接受键盘事件. 键盘事件派发给谁? 如 ...
随机推荐
- Python之路【第二十一篇】:Django之Form组件
Django之Form组件 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 小试牛刀 1. ...
- Atom编辑器入门到精通(一) 安装及使用基础
为什么选择使用Atom Atom是GitHub推出的一款编辑器,被称为21世纪的黑客编辑器,主要的特点是现代,易用,可定制.我之前用过多款编辑器,现在来总结一下个人对各编辑器的看法: Vim是我用的时 ...
- 关于ASPOSE.WORD使用上的一个小问题
最近实习期间负责了公司某个项目的一个功能模块里面的word导出功能,使用的是ASPOSE.WORD类库,但是经常导出时候会遇到图中的问题,大概意思就是两个表格不能跨在一起,调试了好几次还是没发现具体的 ...
- 再跟SQL谈一谈--基础篇
1.简介 2.DDL & DML 3.SELECT ①DISTINCT ②WHERE ③AND & OR ④ORDER BY 4.INSERT 5.UPDATE 6.DELETE 1. ...
- tomcat启动正常,404. Eclipse没有正确部署工程项目
http://blog.csdn.net/lynn_wgr/article/details/7751228 在eclipse中新建的Dynamic Web Project.写好代码后,选择Run on ...
- oracle 高版本导出低版本数据库并且导入到低版本数据的方法
第一步:sqlplus system/egis@orcl as sysdba; 进入sqlplus (输入管理员用户名/密码@数据库密码) 第二步: create directory dumpdir ...
- Xamarin.iOS - 利用Settings插件与EAIntroView制作App的欢迎界面
Xamarin.iOS - 利用Settings插件与EAIntroView制作App的欢迎界面 关于欢迎界面 很多App第一次启动都会有一个欢迎界面,欢迎界面往往决定这用户对App的第一映像,所以欢 ...
- sql server经典sql
1. sql server构造oracle rownum列 select * from ( select row_number() over(order by t.修改时间 desc) rownum, ...
- 基于jQuery的图片左右轮播,基本原理通用
毕竟新人,写点基础的小东西,希望能和大家沟通交流,提高自己的水平. 这个是应用较多的轮播部分,希望能和大家分享一下思路,拓宽视野. 话不多说,上内容. 我的思路很简单就是通过判断index值的大小变化 ...
- 数据库开发 MySQL
MySQL是Web世界中使用最广泛的数据库服务器.SQLite的特点是轻量级.可嵌入,但不能承受高并发访问,适合桌面和移动应用.而MySQL是为服务器端设计的数据库,能承受高并发访问,同时占用的内存也 ...