一.绘制文字 除了绘制图形以外,还可以使用QPainter::darwText()函数来绘制文字,也可以使用QPainter::setFont()设置文字所使用的字体,使用QPainter::fontInfo()函数可以获取字体的信息,它返回QFontInfo类对象.在绘制文字时会默认使用抗锯齿. 1.1 基本绘制 下面仍然在上一节的程序中进行代码演示,更改paintEvent()的内容如下: void Widget::paintEvent(QPaintEvent *) { QPainter p…
一.抗锯齿渲染 1.1 逻辑绘图 图形基元的大小(宽度和高度)始终与其数学模型相对应,下图示意了忽略其渲染时使用的画笔的宽度的样子. 1.2 物理绘图(默认情况) 在默认的情况下,绘制会产生锯齿,并且使用这样的规则进行绘制: 当使用宽度为一个像素的画笔进行渲染时,像素会在数学定义的点的右边和下边进行渲染,如下图1所示.当使用一个拥有偶数像素的画笔进行渲染时,像素会在数学定义的点的周围对称渲染:而当使用一个拥有奇数像素的面笔进行渲染时,首先按照偶数对称绘制,最后一个像素会被渲染到数学定义的点的右边…
注:学习自<Qt Creator 快速入门>第三版.   文档中的示例参考 Qt Example推荐:Painter Paths Example和Vector Deformation   大纲:     绘制文字     绘制路径         path的填充规则         QPainter中与path有关的常用函数   本篇涉及的Qt类: QPainter QFont QPainterPath   绘制文字 (QPainter::darwText()) 除了绘制图形以外,还可以使用Q…
Qt中提供了强大的2D绘图系统,可以使用相同的API在屏幕和绘图设备上进行绘制,它主要基于QPainter.QPaintDevice和QPaintEngine这三个类.它们三者的关系如下图所示: QPainter用来执行绘图操作: QPaintEngine提供了一些接口,可以用于QPainter在不同的设备上进行绘制: QPaintDevice提供绘图设备,它是一个二维空间的抽象,可以使用QPainter在其上进行绘制. 绘图系统中由QPainter来完成具体的绘制操作,提供了大量髙度优化的函数…
2D绘图 Qt4中的2D绘图部分称为Arthur绘图系统.它由3个类支撑整个框架,QPainter,QPainterDevice和QPainterEngine.QPainter用来执行具体的绘图相关操作 如画点,画线,填充,变换,alpha通道等.QPainterDevice是QPainter用来绘图的绘图设备,Qt中有几种预定义的绘图设备,如QWidget,QPixamp,QPrinter 等.他们都从QPaintDevice继承.QPaintEngine类提供了不同类型设备的接口,QPain…
一.图形视图框架的结构 在前面讲的基本绘图中,我们可以自己绘制各种图形,并且控制它们.但是,如果需要同时绘制很多个相同或不同的图形,并且要控制它们的移动.检测它们的碰撞和叠加:或者我们想让自己绘制的图形可以拖动位置.进行缩放和旋转等操作.实现这些功能,要是还使用以前的方法,那么会十分困难.解决这些问题,可以使用Qt提供的图形视图框架. 图形视图(Graphics View)框架结构的主要特点如下: 图形视图(Graphics View)可以对大量定制的2D图形项进行管理和相互作用.视图部件可以让…
一.重绘事件 前面讲到的所有绘制操作都是在重绘事件处理函数paintEvent()中完成的,是QWidget类中定义的函数.一个重绘事件用来重绘一个部件的全部或者部分区域,下面几个原因中的任意一个都会发生重绘事件: repaint()函数或者update()函数被调用: 被隐藏的部件现在被重新显示: 其他一些原因. 大部分部件可以简单地重绘它们的全部界面,但是一些绘制比较慢的部件需要进行优化而只绘制需要的区域(可以使用QPaintEvent::region()来获取该区域).Qt也会通过合并多个…
一.简介 图形视图框架中的事件都是首先由视图进行接收,然后传递给场景,再由场景传递给相应的图形项.而对于键盘事件,它会传递给获得焦点的图形项,可以使用QGraphicsScene类的setFocusItem()函数或者图形项自身调用setFocus()函数来设置焦点图形项.默认的,如果场景没有获得焦点,那么所有的键盘事件都会被丢弃.场景中的图形项获得了焦点,场景也会自动获得焦点. 对于鼠标悬停效果,QGraphicsScene会调度悬停事件.如果一个图形项可以接收悬停事件,那么当鼠标进入它的区域…
在qt中提供了三种渐变方式,分别是线性渐变,圆形渐变和圆锥渐变.如果能熟练应用它们,就能设计出炫目的填充效果. 线性渐变: 1.更改函数如下: void Dialog::paintEvent(QPaintEvent *){    QPainter painter(this);    QLinearGradient linearGradient(100,150,300,150);    //从点(100,150)开始到点(300,150)结束,确定一条直线    linearGradient.se…
1.拖动模式 在QGraphicView中提供了三种拖动模式,分别是: QGraphicsView::NoDrag :忽略鼠标事件,不可以拖动. QGraphicsView::ScrollHandDrag :光标变为手型,可以拖动场景进行移动. QGraphicsView::RubberBandDrag :使用橡皮筋效果,进行区域选择,可以选中一个区域内的所有图形项. 我们可以利用setDragMode()函数进行相应设置.…