一说起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. Bootstrap教程

    Bootstrap 教程 Bootstrap 教程

  2. 清除Eclipse和Myeclipse中的工作空间目录

    打开Eclipse或者Myeclipse后,选择功能菜单里的Windows->Preferences->, 弹出对话框后,选择General->Startup and Shutdow ...

  3. YII中的session和cookie

    session的使用 存储数据 Yii::app()->session["名"] = 值; 取数据 $变量 = Yii::app()->session["名& ...

  4. Unity3D题目,Unity中利用GUI输出九九乘法表

    网上看到的这题,下面贴出源代码 using UnityEngine;using System.Collections; public class c99 : MonoBehaviour//C#脚本名: ...

  5. 多个线程访问url

    多个线程访问url package com.aig.ecompassios.ecard; import java.io.BufferedReader; import java.io.InputStre ...

  6. Ext.Net学习笔记13:Ext.Net GridPanel Sorter用法

    Ext.Net学习笔记13:Ext.Net GridPanel Sorter用法 这篇笔记将介绍如何使用Ext.Net GridPanel 中使用Sorter. 默认情况下,Ext.Net GridP ...

  7. initialize 和init

    initialize 是类方法,创建实例时会调用该方法.但是只会调用一次.如一个类创建了10个对象,initialize方法只会调用一次,但是init会调用10次.init 是实例方法,每次创建一个实 ...

  8. 深入理解Javascript之this关键字

    深入理解Javascript之this关键字 作者: Laruence(   ) 本文地址: http://www.laruence.com/2009/09/08/1076.html 转载请注明出处 ...

  9. UVA 10739 String to Palindrome(动态规划 回文)

    String to Palindrome 题目大意:给出一个字符串s,现在可以进行3种操作(添加字母,删除字母,替换字母),将其变成回文串,求出最少的操作次数.比如abccda,可以用删除操作,删除b ...

  10. 使用原生js与jQuery分别实现一个简单的tab页签

    tab页签通常适用于空间有限而内容较多同时兼顾页面美观度不给用户一种信息过量视觉疲劳的情形.使用面非常广,下面我们用两种方法简单实现之. 首先,构建页面元素.页签的可点击部分我们通常用列表来承载,包括 ...