QT图形视图框架(The QGraphics View Framework)(转)(六)

时间:2023-02-01 18:01:17

OpenGl展示(OpenGL Rendering)

为了使用OpenGL展示,你只要简单地调用QGraphicsView::setViewport()来设置一个新的QGLWidget作为QGraphicsView的视图端口。如果你想要OpenGL具有无锯齿特性,你需要OpenGL采样缓冲支持(参见QGLFormat::sampleBuffers())。

例子:

QGraphicsView view(&scene);

view.setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));

项成组(Item Groups)

通过使一个项成为另外一个项的子项,你可以得到有关项成组的关键特性:这些项会一起移动,所有的变换都从父项传递给子项。QGraphicsItem能够为它的子项处理所有的事件(参见QGraphicsItem::setHandlesChildEvents())。这允许父项代表子项动作,可以有效地将所有子项当作一个整体。

另外,QGraphicsItemGroup是一个特殊的项,它聚合了子项事件处理,并有一个有用的接口用来在组中增加和移除项。向QGraphicsItemGroup将保持项的原始位置和变换,而重父化项会引起子项的重定位,因为新的父项的关系。为来方便,你可以通过场景调用QGraphicsScene::createItemGroup()来创建QGraphicsItemGroups。

窗口部件和布局(Widgets and Layouts)

Qt4.4通过QGraphicsWidget引入了对几何和布局感应的支持。这个特殊的基类与QWidget相似,但又不同。它不从QPaintDevice继承,而是从QGraphicsItem继承。这允许你撰写具有事件、信号和槽、尺寸线索和策略的完整窗口部件,你也能通过QGraphicsLinearLayout和QGraphicsGridLayout管理布局中的窗口部件的几何特性。

图形窗口部件(QGraphicsWidget)

QGraphicsWidget创建在QGraphicsItem之上,它提供了几个方面的结合:相对于QWidget的格外功能,如风格、字体、调色板、布局方向、几何表现和从QGraphicsItem继承的分辨率无关性和变换支持。因为GraphicsView使用实数坐标而不是整数坐标,QGraphicsWidget的几何特性功能也是在QRectF和QPointF上操作。这个也应用到框架矩形、空白边缘和间隙。对于QGraphicsWidget,规定内容边缘为(0.5,0.5,0.5,0.5)并不是不平常的(很平常),例如,你可以创建顶层窗口和子窗口部件,在一些情况下,你现在可以用Graphics View写高级的多文档应用。

一些QWidget的属性被支持了,包括窗口标志和属性,但不是全部。你可以参见QGraphicsWidget的类文件以全面了解它支持或不支持什么。例如,你可以通过Qt::Window窗口标志给QGraphicsWidget的构造函数创建装饰过的窗口,但是,当前的Graphics View不支持在Mac OS X中和普通的Qt::Sheet和Qt::Drawer标志。

QGraphicsWidget的性能将以来社区的反馈不断增强。

图形布局(QGraphicsLayout)

QGraphicsLayout是专为QGraphicsWidget设计的第二代布局框架。它的API与QLayout很相似。你可以在QGraphicsLinearLayout和QGraphicsGridLayout内管理窗口部件和布局。你可以通过QGraphicsLayout的子类很容易写你的布局,或者通过改编QGraphicsLayoutItem子类给布局增加你自己的QGraphicsItems项。

嵌入式窗口部件支持

Graphics View为在场景中嵌入任何窗口部件提供了无缝的支持。你可以嵌入简单窗口部件如QLineEdit或QPushButton,到复杂的窗口部件如QTabWidget,或是完整的主窗口。为了将你的窗口部件嵌入场景,可以简单地调用QGraphicsScene::addWidget(),或创建一个QGraphicsProxyWidget实例来手动嵌入你的窗口部件。

通过QGraphicsProxyWidget,Graphics View将能够深入地集成客户窗口部件特性,包括它的光标、提示、鼠标、tablet、键盘事件、子窗口部件、动画、弹出式部件(即QComboBox或QCompleter)、窗口部件的输入聚焦和激活。QGraphicsProxyWidget也能集成嵌入窗口部件的tab顺序。你甚至可以嵌入一个新的QGrasphicsView到场景中形成复杂的嵌套场景。

当对一个嵌入式窗口部件变换坐标时,Graphics View需要确信窗口部件被分辨率无关地变换了,而允许字体和风格在放大时保持脆弱的。(注意:分辨率无关的影响依赖于风格。)