一说起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的更多相关文章

  1. 该用 QGraphicsView ? QtQuick-QML ?

    目前QtQuick (2014/3/6) 已经发展了有一段时间了,很多人在用因此我也想看看是否适合我目前的项目. 我要做的是一个类似3DMax中的材质编辑器的东西,里面有成千上万的”表单“(不知道怎么 ...

  2. QML 信号与响应方法的总结

    以下内容为本人的著作,如需要转载,请声明原文链接微信公众号「englyf」https://www.cnblogs.com/englyf/p/16748191.html 如果面试过程中,面试官想了解你对 ...

  3. QGraphics

    QGraphicsView和QGraphicsScene QGraphicsScene提供一个场景,可以添加各种item,QGraphicsView用于将元素显示,并支持旋转和缩放:可以将QGraph ...

  4. [转载]震惊!QWidget竟然可以嵌入到QML中,QMl窗口句柄竟然是这样获取

      背景 记得在初学qml时,就被大佬告知Qml的实现有两种方式“view+item”和“engine+widow”,那么能不能将QWidget嵌入到QML中来呢,我收到的答案是不可以,原因是QML的 ...

  5. QDialog QMainwindow QWidget QFrame不同时候用法.

    继承关系:在Qt中所有的类都有一个共同的基类QObject ,QWidget直接继承与QPaintDevice类,QDialog.QMainWindow.QFrame直接继承QWidget 类.   ...

  6. MainWindow、QWidget和QDialog的区别和选择(转载)

    QApplication类用于管理应用程序范围内的资源,其构造函数需要main函数的argc和argv作为参数. Widget被创建时都是不可见的,widget中可容纳其他的widget. Qt中的w ...

  7. QWidget 实现 打破布局 或者 当前窗体内的 弹窗 (借助伪造实现)

    but = QtWidgets.QToolButton(Dialog2) but.setText('**') but.setAutoRaise(True) layout.addWidget(but) ...

  8. [转载] - QWidget、QMainWindow、QDialog和QFrame的区别

    继承关系:在Qt中所有的类都有一个共同的基类QObject ,QWidget直接继承与QPaintDevice类,QDialog.QMainWindow.QFrame直接继承QWidget 类.   ...

  9. QWidget 键盘事件 焦点(QApplication源码)

    在Qt中,键盘事件和QWidget的focus密不可分:一般来说,一个拥有焦点(focus)的QWidget或者grabKeyboard()的QWidget才可以接受键盘事件. 键盘事件派发给谁? 如 ...

随机推荐

  1. 20160322 javaweb 学习笔记--response 重定向

    //一般方法 response.setStatus(302); response.setHeader("Location", "/20160314/index.jsp&q ...

  2. android测试分析1

    Android测试框架,开发环境中集成的一部分,提供一个架构和强有力的工具 可以帮助测试你的应用从单元到框架的每个方面. 测试框架有这些主要特征: 1.Android测试组件基于Junit.你可以使用 ...

  3. html元素

    类型 HTML元素 描述 主窗体元素 <HTML></HTML> 超文本的开始和结束 <HEAD></HEAD> 超文本信息头的开始和结束 <TI ...

  4. node.js 访问sql server的 node_modules “msnodesql"的安装编译方法

    http://stackoverflow.com/questions/19661811/unable-to-download-msnodesql-0-2-1-v0-10-x64-msi 首先要满足以下 ...

  5. 关于IOS网络通信的学习

    最近由于需要在看关于网络通信方面的知识,所以在网上找了找关于网络解释方面的知识.找了半天没有找到一篇能详细解释通讯流程的,心里忍不住就万马奔腾了.没办法,谁让自己想学呢!于是又找了找,觉得没有满意的. ...

  6. Mac OS X 在Finder新建文本文件

    Automator 新建一个 Application添加一个动作 "Run AppleScript"代码如下 on run {input, parameters} tell app ...

  7. iOS-开发日志-UIimageView

      UIImageView属性   1.Image 设置图片,默认显示 UIImageView *_imageView = [[UIImageView alloc]init]; _imageView. ...

  8. jquery 中的 $("#id") 与 document.getElementById("id") 的区别

    以前没注意过,认为jquery 中的 $("#air") 与 document.getElementById("air") 是一回事,指的是同一个东西.在今天写 ...

  9. 测试php页面执行代码时间

    //生命一个计算脚本运行时间的类 class Timer { private $startTime = 0; //保存脚本开始执行时的时间(以微秒的形式保存) private $stopTime = ...

  10. rpc远程调用开发

    RPC即远程过程调用,适用于集群管理,集群节点就是RPCServer,而我们发起远程调用的web服务器就是RPCClient.所以是少数rpcClient(可能一个)对多个RPCServer(集群节点 ...