在 C# 等语言中提供了 Property (属性)特性,对类内部的私有变量(字段)对外界提供读写方法和控制,而 C++ 没有提供这种特性。有些编译器,比如 C++ Builder 提供了 __property 关键字就是为了扩展 C++ 的这一特性。然而基于标准 C++ 编译器的 Qt 并没有这样去做。 除了使用模版、重载操作符来模拟属性的功能,通常简单地写出读、写公共函数,对私有变量进行操作。Qt 还提供了一种基于 moc (Meta-Object Compiler)的动态属性方法:QObject::property() 与 QObject::setProperty()。使用 QObject::setProperty() 还可以方便地在运行时动态地添加和删除新的属性。看下面一个例...
包含 Qt 标签的文章
Qt 图形视图框架(Graphics View Framework)
简介 Qt 的图形视图提供了支持大量自定义的 2D 图形项(QGraphicsItem)交互的管理器(QGraphicsScene),以及一个支持缩放和旋转操作的视图部件(QGraphicsView)用于显示这些图形。框架还包含了支持对图形项精确交互的事件传播架构。图形视图使用 BSP( Binary Space Partitioning ,二叉空间分割) 树提供对图形项的快速查找,正因如此,即使是包含数以百万计对象的超大场景,也能够实时地显示。图形视图提供了基于图形项的 model-view 编程模式,这有点类似 QTableView、QTreeView 和 QListView。同一个场景可以由多个视图来显示,一个场景中则可包含多种不同形状的图形项。 演员、道具 Ready QGraphicsItem(图形项) 是 QGraphicsScene 场景中的基础图形类,好比是电影场景中的演员、道具。 Qt 视图体系提供了一些派生于 QGraphicsItem 的标准图形项:矩形(QGraphicsRectItem)、椭圆(QGraphicsEllipseItem)、文本(QGraphicsTextItem)等。QGraphicsItem 支持如下功能: 鼠标的按下、移动、释放、双击事件,此外还有鼠标的悬浮、滚轮和上下文菜单事件; 键盘的输入焦点和按键事件; 拖放; 通过父子关系或使用 QGraphicsItemGroup 的组合; 碰撞检测。 如果要实现自定义的图形,需要继承 QGraphicsItem 并重写两个纯虚公共函数 boundingRect() 和 paint(),boundingRect() 用于返回图形的大致轮廓(矩形),paint() 则用于绘制图形的实际内容。图形的轮廓用于定于绘制的范围、碰撞检测、判断是否处于事件(鼠标按下、经过等)的接收范围内等。如果要精确定义图形的轮廓则还需要重写虚函数 shape() 。当存在 shape() 定义的轮廓时,碰撞检测、事件相应范围等检测将取决于 shape() 的返回值。 Action QGraphicsScene(图形场景)可以理解为电影的场景,场景也就是场面,一般是指在一个特定的空间内发生的故事的画面。比如《林冲夜宿山神庙》是一个故事,林冲、山神庙、纷飞的大雪等人物以及所发生的故事就是一个场景了。 QGraphicsScene 是 QGraphicsItems 2D 图形的容器,提供图形的操作接口、传递事件和管理各个图形的的状态,它有如下职责: 提供一个快速的接口用来管理大量的图形项; 向每个图形项传递事件; 管理图形的状态,如选中状态、焦点的处理; 提供无变形的展示功能,主要为了打印。 Cut! 收工了 QGraphicsView(图形视图)是一个可视部件,好比是电影荧幕,是一个面向观众的视口(viewport),有了它我们才能看到 QGraphicsScene 场景中所演出的内容。与电影荧幕的痛的是,QGraphicsView 还提供了观众与电影中的演员、道具的交互的方法,或许用舞台剧代替电影来比喻更贴切些。 QGraphicsView 实现了 QGraphicsItem 的可视化,还提供了缩放和旋转得支持。 那谁,盒饭钱总该给报销掉吧~ 图形视图坐标系 图形视图基于笛卡尔坐标系,在场景中,图形项的位置和形状使用 x 轴坐标与 y 轴坐标来表示。当使用未经变形的视图来观察场景时,场景中的一个单位等于屏幕上的一个像素。在图形视图系统中有三种坐标系:图形项坐标系、场景坐标系与视图坐标系。为了便于使用,提供了用于坐标系映射的转换函数。 框架中的类 下面这些类提供了创建交互式应用程序的框架: 类名 说明 QAbstractGraphicsShapeItem Common base for all path items QGraphicsAnchor Represents an anchor between two items in a QGraphicsAnchorLayout QGraphicsAnchorLayout Layout where one can anchor widgets together in Graphics View QGraphicsEffect The base class for all graphics effects QGraphicsEllipseItem Ellipse item that you can add to a QGraphicsScene QGraphicsGridLayout Grid layout for managing widgets in Graphics View QGraphicsItem The base class for all graphical items in a QGraphicsScene QGraphicsItemGroup Container that treats a group of items as a single item QGraphicsLayout The base class for all layouts in Graphics View QGraphicsLayoutItem Can be inherited to allow your custom items to be managed by layouts QGraphicsLineItem Line item that you can add to a QGraphicsScene QGraphicsLinearLayout Horizontal or vertical layout for managing widgets in Graphics View QGraphicsObject Base class for all graphics items that require signals, slots and properties QGraphicsPathItem Path item that you can add to a QGraphicsScene QGraphicsPixmapItem Pixmap item that you can add to a QGraphicsScene QGraphicsPolygonItem Polygon item that you can add to a QGraphicsScene QGraphicsProxyWidget Proxy layer for embedding a QWidget in a QGraphicsScene QGraphicsRectItem Rectangle item that you can add to a QGraphicsScene QGraphicsScene Surface for managing a large number of 2D graphical items QGraphicsSceneContextMenuEvent Context menu events in the graphics view framework QGraphicsSceneDragDropEvent Events for drag and drop in the graphics view framework QGraphicsSceneEvent Base class for all graphics view related events QGraphicsSceneHelpEvent Events when a tooltip is requested QGraphicsSceneHoverEvent Hover events in the graphics view framework QGraphicsSceneMouseEvent Mouse events in the graphics view framework QGraphicsSceneMoveEvent Events for widget moving in the graphics view framework QGraphicsSceneResizeEvent Events for widget resizing in the graphics view framework QGraphicsSceneWheelEvent Wheel events in the graphics view framework QGraphicsSimpleTextItem Simple text path item that you can add to a QGraphicsScene QGraphicsTextItem Text item that you can add to a QGraphicsScene to display formatted text QGraphicsTransform Abstract base class for building advanced transformations on QGraphicsItems QGraphicsView Widget for displaying the contents of a QGraphicsScene QGraphicsWidget The base class for all widget items in a QGraphicsScene QStyleOptionGraphicsItem Used to describe the parameters needed to draw a QGraphicsItem ...
Qt 中如何创建和使用库
库 将经常用到的程序模块化,制作成库。库的概念给编程带来明显的好处,不需要因为要开发或修改一个小软件,就要重写、编译大量的源代码,降低了开发难度,节约了可观的时间。 程序编译成可执行程序的过程一般包括:预处理、编译、汇编和链接几个步骤。我们所说的库就是在链接过程中用到的(动态库的显式链接除外),对不同类型的库有不同的处理模式。 库常分为动态库(共享库)和静态库。链接阶段使用静态库的方式是从静态库中获取用到的程序并集成到目标程序中(静态地存在),以后使用程序的时候就不再需要到静态库中去找了。而与之相对,动态库则在链接过程中不集成到目标程序中去,使用时动态地加载。 静态库文件的后缀一般是 .lib、.a,动态库文件的后缀一般是 .dll、.s...