| 主页 | 所有的类 | 主要的类 | 注释的类 | 分组的类 | 函数 |
QPainter类低水平的绘制,例如在窗口部件上。 详情请见……
#include <qpainter.h>
继承了Qt。
被QDirectPainter继承。
绘制工具为做到绝大部分绘制图形用户界面程序的需要提供了高度优化的函数。QPainter可以绘制从简单的直线到像饼图和弦这样的复杂形状。它也可以绘制排列的文本和像素映射。通常,它在一个“自然的”坐标系统中绘制,但是它也可以在视和世界转换中做到这些。
绘图工具的典型用法是:
绝大多数情况下,所有这些是在一个绘制事件中完成的。(实际上,99%的QPainter使用是在QWidget::paintEvent()的重新实现中,并且绘制工具已经为这种用法高度优化了。)这里是一个非常简单的实例:
void SimpleExampleWidget::paintEvent()
{
QPainter paint( this );
paint.setPen( Qt::blue );
paint.drawText( rect(), AlignCenter, "The Text" );
}
使用方法很简单并且这里有你可以使用的许多设置:
注意这些设置中的一些会镜像到一些绘制设备的设置中,例如QWidget::font()。QPainter::begin()(或者QPainter的构造函数)从绘制设备中复制这些属性。调用,例如QWidget::setFont()直到绘制工具开始在它上面绘制才会生效。
把所有的这些设置保存到内部栈中,restore()把它们弹出来。
QPainter的核心功能是绘制,并且这里有最简单的绘制函数:drawPoint()、drawPoints()、drawLine()、drawRect()、drawWinFocusRect()、drawRoundRect()、drawEllipse()、drawArc()、drawPie()、drawChord()、drawLineSegments()、drawPolyline()、drawPolygon()、drawConvexPolygon()和drawCubicBezier()。所有这些函数使用整数坐标,它们没有浮点数的版本,因为我们想使绘制尽可能快地进行。
这里有绘制像素映射/图像的函数,名为drawPixmap()、drawImage()和drawTiledPixmap()。drawPixmap()和drawImage()产生同样的结果,除了drawPixmap()在屏幕上更快一些并且drawImage()在QPrinter和QPicture上更快并且有时更好。
使用drawText()可以完成文本绘制,并且当你需要良好的定位,boundingRect()告诉你哪里是给定的drawText()命令将要绘制的。
这里有一个drawPicture()函数,用来使用这个绘制工具绘制整个QPicture的内容。drawPicture()是唯一忽视所有绘制工具设置的函数:QPicture有它自己的设置。
通常,QPainter在设备自己的坐标系统(通常是像素)上操作,但是QPainter也很好地支持坐标转换。关于更通用的概述和简单实例请参考坐标系统。
最常用到的函数是scale()、rotate()、translate()和shear(),所有这些在worldMatrix()上操作。setWorldMatrix()可以替换或者添加到当前设置的worldMatrix()。
setViewport()设置QPainter操作的矩形。默认是整个设备,这通常就很好了,除了在打印机上。setWindow()设置坐标系统,它是被映射到viewport()的矩形。在window()中绘制的东西最终会在viewport()中。窗口的默认就是和视口一样,并且如果你没有使用转换,它们会被优化,赢得一点点速度。
在所有坐标转换完成之后,QPainter能够把绘制裁剪到一个任意的矩形或者区域。如果QPainter裁剪了,hasClipping()为真并且clipRegion()返回裁剪区域。你可以使用setClipRegion()或setClipRect()来设置它。注意裁剪是很慢的。它是完全依赖系统的,但是单凭经验的方法,你可以假设绘制的速度与裁剪区域中的矩形数量成反比。
在QPainter的裁剪之后,绘制设备也可以被裁剪。例如,绝大多数窗口部件按子窗口部件的像素裁剪并且绝大多数打印机按接近纸的边缘裁剪。这些另外的裁剪不会受clipRegion()或hasClipping()的返回值影响。
QPainter也包括一些比较少用到的函数,它们在当它们被需要的时候是非常有用的。
isActive()指出绘制工具是否是激活的。begin()(和最常用的构造函数)使它激活。end()(和析构函数)释放它们。如果绘制工具是激活的,device()返回绘制工具在哪个绘制设备上绘制。
有时让其它什么在一个不平常的QPaintDevice上绘制是人们想要的。QPainter支持一个静态函数来做这些,redirect()。我们建议不要使用它,但是对于一些老手这是完美的。
setTabStops()和setTabArray()可以改变tab在哪里停止,但是它们极少被用到。
警告:注意QPainter不会试图在底层窗口系统的左边限制周围工作。坐标在+/-4000时,一些平台的行为可能就不正确了。
请参考QPaintDevice、QWidget、QPixmap、QPrinter、QPicture、应用程序预演、坐标系统概述、图像类和图像处理类。
请参考clipRegion()。
请参考drawText()。
注意所有绘制工具的设置(setPen、setBrush等等)在当begin()被调用时会被重新设置为默认值。
这个构造函数对短期的绘制工具是很方便的,例如,在一个绘制事件中并且也该被立即使用。构造函数为你调用begin()并且QPainter的析构函数会自动调用end()。
这是使用begin()和end()的实例:
void MyWidget::paintEvent( QPaintEvent * )
{
QPainter p;
p.begin( this );
p.drawLine( ... ); // 绘制代码
p.end();
}
使用这个构造函数的相同实例:
void MyWidget::paintEvent( QPaintEvent * )
{
QPainter p( this );
p.drawLine( ... ); // 绘制代码
}
请参考begin()。
返回当前背景色。
请参考setBackgroundColor()和QColor。
返回当前背景模式。
请参考setBackgroundMode()和BGMode。
发生的错误是严重的问题,例如这些:
p->begin( 0 ); // 不可能——绘制设备不能为0
QPixmap pm( 0, 0 );
p->begin( pm ); // 不可能——pm.isNull();
p->begin( myWidget );
p2->begin( myWidget ); // 不可能——在同一时间只能有一个绘制工具
注意绝大部分时间,你可以使用一个构造函数来代替begin(),并且end()会在析构函数中被自动完成。
警告:在同一时间绘制设备上只能有一个绘制工具。
实例:aclock/aclock.cpp、application/application.cpp、desktop/desktop.cpp、hello/hello.cpp、picture/picture.cpp、t10/cannon.cpp和xform/xform.cpp。
这个版本在绘制设备pd上打开绘制工具并且从copyAttributes设置初始画笔、背景颜色和字体,当unclipped为真,在绘制设备的子对象上进行绘制。这等于:
QPainter p;
p.begin( pd );
p.setPen( copyAttributes->foregroundColor() );
p.setBackgroundColor( copyAttributes->backgroundColor() );
p.setFont( copyAttributes->font() );
这个开始函数便于双重缓冲。当你在一个像素映射上绘制,而不是直接在窗口部件上绘制(稍后用bitBlt把这个像素映射放到窗口部件中),你将需要设置窗口部件的字体等等。这个函数正确地做到了这些。
实例:
void MyWidget::paintEvent( QPaintEvent * )
{
QPixmap pm(size());
QPainter p;
p.begin(&pm, this);
// ……绘制操作可能有闪烁……
p.end();
bitBlt(this, 0, 0, &pm);
}
请参考end()。
返回相对应的drawText()函数所要打印的对齐的文本的边界矩形,如果len>-1,使用字符串的len个字符,或者如果len为-1,使用整个字符串。绘制已经相应的边界矩形,由点(x, y)以及宽w和高h来约束。
flags参数是下列标记的位或运算结果:
| 标记 | 意义 |
|---|---|
| AlignAuto | 根据语言对齐,通常是左。 |
| AlignLeft | 左对齐。 |
| AlignRight | 右对齐。 |
| AlignHCenter | 水平中间对齐。 |
| AlignTop | 上对齐。 |
| AlignBottom | 下对齐。 |
| AlignVCenter | 垂直中间对齐。 |
| AlignCenter | (==AlignHCenter | AlignVCenter)。 |
| SingleLine | 在文本中忽略换行符。 |
| ExpandTabs | 扩展tab。 |
| ShowPrefix | 把“&x”解释为“x”。 |
| WordBreak | 打断文本来适应矩形。 |
水平对齐默认为AlignLeft并且垂直对齐默认为AlignTop。
如果几种同一方向上(水平或垂直)的对齐标记一起使用,对齐结果是不确定的。
intern参数不应该被使用。
请参考Qt::TextFlags。
返回相对应的drawText()函数所要打印的对齐的文本的边界矩形,如果len>-1,使用字符串的len个字符,或者如果len为-1,使用整个字符串。绘制已经相应的边界矩形,由矩形r来约束。
intern参数不应该被使用。
请参考drawText()、fontMetrics()、QFontMetrics::boundingRect()和Qt::TextFlags。
返回绘制工具的当前画刷。
请参考QPainter::setBrush()。
实例:themes/metal.cpp和themes/wood.cpp。
返回画刷原点的当前设置。
请参考setBrushOrigin()。
请参考setClipRegion()、setClipRect()、setClipping()和QPainter::CoordinateMode。
实例: themes/wood.cpp。
返回绘制工具当前正在绘制的绘制设备,如果绘制工具没有激活,返回0。
请参考QPaintDevice::paintingActive()。
实例:helpviewer/helpwindow.cpp和listboxcombo/listboxcombo.cpp。
角度a和alen是1/16度,也就是说一个完整的圆等于5760(16*360)。正数的a和alen意味着逆时针方向并且负值意味着顺时针方向。0度在3点的时钟位置。
实例:
QPainter p( myWidget );
p.drawArc( 10,10, 70,100, 100*16, 160*16 ); // 绘制一个“(”这样的弧
绘制由矩形r确定的弧,开始角度为a,并且弧长为alen。
这个弦由当前brush()填充。
角度a和alen是1/16度,也就是说一个完整的圆等于5760(16*360)。正数的a和alen意味着逆时针方向并且负值意味着顺时针方向。0度在3点的时钟位置。
绘制由矩形r确定的弦,开始角度为a,并且弧长为alen。
如果提供的多边形不是凸的,结果是不确定的。
在一些平台上(例如X窗口),这个比drawPolygon()更快。
实例: aclock/aclock.cpp。
在a[index + 3]之后的控制点被忽略。如果没有足够的控制点,就什么也不发生。
实例:drawdemo/drawdemo.cpp、picture/picture.cpp和tictac/tictac.cpp。
绘制在r内适合的的椭圆。
如果device()是QPixmap或QWidget,这个函数可以把image转换为像素映射然后再绘制它;如果device()是QPrinter或QPicture,它会直接绘制它。
当在QPrinter上绘制时,图像中的alpha掩码将被忽略。
请参考drawPixmap()和QPixmap::convertFromImage()。
实例: canvas/canvas.cpp。
在给定的点绘制图像中的矩形sr。
在点p绘制图像i。
如果图像需要被修改来适应低分辨率的结果(例如从32位转换为8位),使用conversion_flags来指定你希望发生什么。
在矩形r中绘制图像i。如果图像和矩形的大小不同,图像将被伸缩来适应矩形。
请参考pen()。
实例:aclock/aclock.cpp、drawlines/connect.cpp、progress/progress.cpp、splitter/splitter.cpp、themes/metal.cpp和themes/wood.cpp。
绘制从点p1到点p2的直线。
绘制的第一条线是从a[index]到a[index+1]。绘制的第二条线是从a[index+2]到a[index+3],等等。
请参考drawPolyline()、drawPolygon()和QPen。
当这个函数被调用时,如果(x, y) = (0, 0),它就和QPicture::play()一样了。
实例:picture/picture.cpp和xform/xform.cpp。
这个函数是废弃的。它的提供只是为了保证旧代码能够工作。我们强烈建议在新代码中不要使用它。
使用另外一个(0, 0)位移的QPainter::drawPicture()函数来替代它。
在点p绘制图片pic。
这个饼图由当前的brush()填充。
角度a和alen是1/16度,也就是说一个完整的圆等于5760(16*360)。正数的a和alen意味着逆时针方向并且负值意味着顺时针方向。0度在3点的时钟位置。
实例:drawdemo/drawdemo.cpp、grapher/grapher.cpp、t10/cannon.cpp和t9/cannon.cpp。
绘制由矩形r确定的饼图,开始角度为a,并且弧长为alen。
(x, y)指定了要被绘制的绘制设备的左上点。(sx, sy)指定了要被绘制的pixmap中的左上点。默认为(0, 0)。
(sw, sh)指定了要被绘制的pixmap的大小。默认(-1, -1),意思是一直到像素映射的右下。
当在QPrinter上绘制时,当前像素映射的遮蔽或者它的alpha通道被忽略。
请参考bitBlt()和QPixmap::setMask()。
实例:grapher/grapher.cpp、picture/picture.cpp、qdir/qdir.cpp、qtimage/qtimage.cpp、showimg/showimg.cpp、t10/cannon.cpp和xform/xform.cpp。
绘制像素映射pm中的矩形sr,原点就放在点p处。
绘制像素映射pm,原点就放在点p处。
在矩形r中绘制像素映射pm。如果像素映射和矩形大小不同,像素映射被拉伸来适合这个矩形。
请参考QPen。
实例:desktop/desktop.cpp和drawlines/connect.cpp。
绘制点p。
如果index为非零(默认为0),只有从index开始的点被绘制。如果npoints为负数(默认),从index开始剩余的所有点都被绘制。如果index为0或者正数,则index个点被绘制。
如果npoints为-1(默认),直到数组的最后的所有点都被使用(也就是说a.size()-index条线确定的多边形)。
第一个点总是被连接到最后一个点上。
多边形被当前brush()填充。如果winding为真,多边形会被使用缠绕填充算法(winding fill algorithm)填充。如果winding为假,多边形会被使用奇偶(交错)填充算法(even-odd (alternative) fill algorithm)填充。
请参考drawLineSegments()、drawPolyline()和QPen。
实例:desktop/desktop.cpp和picture/picture.cpp。
如果npoints为-1(默认),直到数组的最后的所有点都被使用(也就是说a.size()-index条线确定的多边形)。
请参考drawLineSegments()、drawPolygon()和QPen。
实例:scribble/scribble.cpp和themes/metal.cpp。
请参考QPen和drawRoundRect()。
实例:drawdemo/drawdemo.cpp、picture/picture.cpp、t10/cannon.cpp、t11/cannon.cpp、t9/cannon.cpp、tooltip/tooltip.cpp和trivial/trivial.cpp。
绘制矩形r。
xRnd和yRnd参数指定了角有多圆。0构成了直角,99是最圆。
宽和高包括所有的绘制的线。
实例:drawdemo/drawdemo.cpp和themes/wood.cpp。
绘制一个圆角矩形r,在每个角的x位置xRnd、y位置yRnd绘制圆角。
在点p从位置pos开始绘制文本那。如果len为-1,整个字符串被绘制。否则只是绘制开始的len个字符。文本的方向由dir确定。
实例:desktop/desktop.cpp、drawdemo/drawdemo.cpp、grapher/grapher.cpp、picture/picture.cpp、progress/progress.cpp、t8/cannon.cpp和trivial/trivial.cpp。
在位置(x, y)绘制给定文本。如果len为1,整个字符串被绘制。否则只是绘制开始的len个字符。文本的方向由dir确定。
在给定的点绘制文本。
在点(x, y)从位置pos开始绘制文本那。如果len为-1,整个字符串被绘制。否则只是绘制开始的len个字符。文本的方向由dir确定。
在从(x, y)开始,宽为w,高为h的矩形中绘制给定文本。如果len为-1,整个字符串被绘制。否则只是绘制开始的len个字符。文本的标记由flags参数中的Qt::AlignmentFlags和Qt::TextFlags或运算的结果给定。br(如果非零)参数只是在内部使用。
在矩形r中从str中绘制最多len个字符。
注意r.y()的意思和两个drawText()的变体不同。
这个函数绘制格式化的文本。tf文本格式是Qt::AlignmentFlags和Qt::TextFlags或运算的结果。
水平对齐方式默认为AlignAuto并且垂直对齐方式默认为AlignTop。
brect(如果非零)被设置为输出的矩形的实际边界。internal还是用于内部。
请参考boundingRect()。
(x, y)指定了绘制设备的左上角,宽和高由w和h给定。(sx, sy)指定了所要绘制的pixmap的左上角。默认为(0, 0)。
调用drawTiledPixmap()和在一个区域上使用一个像素映射多次调用drawPixmap()相似,但是根据底下的窗口系统,这个有更多潜在的效率。
请参考drawPixmap()。
在原点在sp的矩形r中绘制平铺的pm。
在矩形r中绘制平铺的pm。
这个函数绘制点画矩形(XOR不被使用)用来指出键盘焦点(当QApplication::style()是WindowStyle的时候)。
用来绘制矩形的画笔颜色不是黑色就是白色,依赖于bgColor的颜色(请参考QColor::gray())。
警告:如果坐标系统已经被旋转或者修剪,这个函数什么也不绘制。
请参考drawRect()和QApplication::style()。
绘制一个左上角在(x, y)并且宽为w、高为h的窗口焦点矩形。
这个函数绘制点画矩形(XOR不被使用)用来指出键盘焦点(当QApplication::style()是WindowStyle的时候)。
警告:如果坐标系统已经被旋转或者修剪,这个函数什么也不绘制。
请参考drawRect()和QApplication::style()。
绘制矩形r作为窗口焦点矩形。
使用背景色bgColor绘制矩形r作为窗口焦点矩形。
注意虽然你几乎不需要调用end(),析构函数将会执行它,但是至少还有一种情况需要它,就是双重缓冲。
QPainter p( myPixmap, this )
// ...
p.end(); // 停止在myPixmap上的绘制
p.begin( this );
p.drawPixmap( myPixmap );
因为当它正在被绘制的时候,你不能绘制一个QPixmap,它需要关闭激活的绘制工具。
实例:aclock/aclock.cpp、application/application.cpp、desktop/desktop.cpp、hello/hello.cpp、picture/picture.cpp、t10/cannon.cpp和xform/xform.cpp。
擦除x、y、w、h中的区域。等价于fillRect( x, y, w, h, backgroundColor() )。
实例:listboxcombo/listboxcombo.cpp和showimg/showimg.cpp。
擦除矩形r中的区域。
你可以指定QColor作为brush,因为QBrush的一个构造函数可以得到QColor参数并且创建一个实心模式的画刷。
请参考drawRect()。
实例:listboxcombo/listboxcombo.cpp、progress/progress.cpp、qdir/qdir.cpp、qfd/fontdisplayer.cpp、themes/metal.cpp和themes/wood.cpp。
在矩形r中使用brush填充。
如果平台不支持刷新一个指定区域,这个刷新将更新整个设备。
请参考CoordinateMode。
刷新任何缓存的绘制操作。
返回当前设置的绘图工具字体。
实例: fileiconview/qfileiconview.cpp。
请参考fontMetrics()和isActive()。
实例:action/application.cpp、application/application.cpp、desktop/desktop.cpp、drawdemo/drawdemo.cpp、helpviewer/helpwindow.cpp、mdi/application.cpp和qwerty/qwerty.cpp。
返回绘制中使用的由平台决定的句柄。使用这个函数是无法移植的。
如果裁剪已经被设置,返回真,否则返回假。
请参考setClipping()。
实例: themes/wood.cpp。
如果视转换生效,返回真,否则返回假。
请参考setViewXForm()和xForm()。
如果世界转换生效,返回真,否则返回假。
请参考setWorldXForm()。
如果绘图工具正在激活绘制,也就是说begin()已经被调用并且end()还没有被调用,返回真,否则返回假。
请参考QPaintDevice::paintingActive()。
实例: desktop/desktop.cpp。
请参考QPen、moveTo()、drawLine()和pos()。
绘制到典p的线。
设置当前画笔位置为点p。
返回绘图工具的当前画笔。
请参考setPen()。
实例:progress/progress.cpp和themes/wood.cpp。
请参考moveTo()。
返回当前的光栅操作。
请参考setRasterOp()和RasterOp。
通常情况下,你将可能发现调用QPixmap::grabWidget()或者QPixmap::grabWindow()是更容易的解决方法。
请参考worldMatrix()、viewport()和window()。
请参考save()。
实例: aclock/aclock.cpp。
我们建议使用restore()来替代它。
请参考translate()、scale()、shear()、resetXForm()、setWorldMatrix()和xForm()。
实例:aclock/aclock.cpp、t10/cannon.cpp和t9/cannon.cpp。
请参考restore()。
实例: aclock/aclock.cpp。
我们建议使用save()来替代它。
请参考translate()、shear()、rotate()、resetXForm()、setWorldMatrix()和xForm()。
实例: xform/xform.cpp。
背景色是当绘制不透明文本、点画线和位图时填充的颜色。背景色在透明背景模式(这是默认的)下无效。
请参考backgroundColor()、setBackgroundMode()和BackgroundMode。
透明模式绘制不设置背景像素绘制点画线和文本。不透明模式使用当前背景颜色填充这些空间。
注意为了绘制透明的位图和像素映射,你必须使用QPixmap::setMask()。
请参考backgroundMode()和setBackgroundColor()。
实例: picture/picture.cpp。
实例:aclock/aclock.cpp、drawdemo/drawdemo.cpp、picture/picture.cpp、t10/cannon.cpp、t9/cannon.cpp、themes/wood.cpp和tooltip/tooltip.cpp。
设置绘图工具的画刷为brush。
brush定义了外形如何被填充。
请参考brush()。
设置绘图工具的画刷具有风格SolidPattern和特定的color。
画刷原点指定绘图工具的画刷的(0, 0)坐标。这个设置只适用于模式画刷和像素映射画刷。
请参考brushOrigin()。
设置画刷原点为点p。
设置裁剪区域为矩形x、y、w、h并且使裁剪生效。裁剪模式被设置为m。
注意裁剪区域是在物理设备坐标中给定的并且如果m等于CoordDevice(默认),不服从任何坐标转换。如果m等于CoordPainter,返回的区域在模型坐标中。
请参考setClipRegion()、clipRegion()、setClipping()和QPainter::CoordinateMode。
实例:grapher/grapher.cpp、progress/progress.cpp、qtimage/qtimage.cpp、showimg/showimg.cpp、splitter/splitter.cpp和trivial/trivial.cpp。
设置裁剪区域为矩形r并且使裁剪生效。裁剪模式被设置为m。
请参考CoordinateMode。
注意裁剪区域是在物理设备坐标中给定的并且不服从任何坐标转换。
请参考setClipRect()、clipRegion()、setClipping()和CoordinateMode。
实例:qfd/fontdisplayer.cpp和themes/wood.cpp。
请参考hasClipping()、setClipRect()和setClipRegion()。
实例: themes/wood.cpp。
这个字体被后面的drawText()函数使用。文本颜色和画笔颜色相同。
实例:application/application.cpp、drawdemo/drawdemo.cpp、grapher/grapher.cpp、hello/hello.cpp、picture/picture.cpp、t13/cannon.cpp和xform/xform.cpp。
pen定义了如何绘制线和轮廓,并且它也定义了文本颜色。
请参考pen()。
实例:desktop/desktop.cpp、drawdemo/drawdemo.cpp、progress/progress.cpp、t10/cannon.cpp、t9/cannon.cpp、themes/metal.cpp和themes/wood.cpp。
设置绘图工具画笔有风格style、宽为0并且为黑色。
设置绘图工具画笔有风格SolidLine、宽为0并且为特定的color。
请参考rasterOp()和Qt::RasterOp。
如果tab数组和tab stop大小被设置,tab数组先生效。
请参考tabArray()、setTabStops()、drawText()和fontMetrics()。
当绘制设置了ExpandTabs的格式化文本时,tab stop被用到。只有在没有tab数组被设置(这是默认的情况)的情况下,这个确定的tab stop值被使用。
请参考tabStops()、setTabArray()、drawText()和fontMetrics()。
请参考hasViewXForm()、setWindow()、setViewport()、setWorldMatrix()、setWorldXForm()和xForm()。
视口矩形是视转换的一部分。视口指定了设备坐标系统并且被x、y、w宽和h高参数指定。它的姐妹window()指定了逻辑坐标系统。
默认视口矩形和设备矩形一样。关于坐标转换的概述请参考坐标系统概述。
请参考viewport()、setWindow()、setViewXForm()、setWorldMatrix()、setWorldXForm()和xForm()。
实例: aclock/aclock.cpp。
设置绘图工具的视口为矩形r。
窗口矩形是视转换的一部分。窗口指定了逻辑坐标系统并且被x、y、w宽和h高参数指定。它的姐妹viewport()指定了设备坐标系统。
默认窗口矩形和设备矩形一样。关于坐标转换的概述请参考坐标系统概述。
请参考window()、setViewport()、setViewXForm()、setWorldMatrix()和setWorldXForm()。
实例:aclock/aclock.cpp和drawdemo/drawdemo.cpp。
设置绘图工具的窗口为矩形r。
如果combine为真,那么m与当前变换矩阵组合,否则m替代当前变换矩阵。
如果m是单位矩阵并且combine为假,这个函数调用setWorldXForm(FALSE)。(单位矩阵是QWMatrix::m11()和QWMatrix::m22()为1.0并且其它为0.0的矩阵。)
在视变换(也就是window和viewport)之后世界变换被应用。
下列的函数不使用QWMatrix就可以转换坐标系统:
它们在绘制工具的worldMatrix()上操作并且像这样重新实现:
void QPainter::rotate( double a )
{
QWMatrix m;
m.rotate( a );
setWorldMatrix( m, TRUE );
}
注意当你在QPicture中绘制时,你应该总是使用combine。否则它也许不可能会使用其它变换来重放图片。使用translate()、scale()等等是安全的。
关于坐标系统的简要概述,请参考坐标系统概述。
请参考worldMatrix()、setWorldXForm()、setWindow()、setViewport()、setViewXForm()、xForm()和QWMatrix。
实例:drawdemo/drawdemo.cpp和xform/xform.cpp。
请参考setWorldMatrix()、setWindow()、setViewport()、setViewXForm()和xForm()。
请参考translate()、scale()、rotate()、resetXForm()、setWorldMatrix()和xForm()。
返回当前设置的tab stop数组。
请参考setTabArray()。
返回当前的tab stop设置。
请参考setTabStops()。
例如,下面这个代码在同一个点上绘制两次:
void MyWidget::paintEvent()
{
QPainter paint( this );
paint.drawPoint( 0, 0 );
paint.translate( 100.0, 40.0 );
paint.drawPoint( -100, -40 );
}
请参考scale()、shear()、rotate()、resetXForm()、setWorldMatrix()和xForm()。
实例:helpviewer/helpwindow.cpp、t10/cannon.cpp、t9/cannon.cpp、themes/metal.cpp、themes/wood.cpp和xform/xform.cpp。
请参考setViewport()和setViewXForm()。
实例: aclock/aclock.cpp。
请参考setWindow()和setViewXForm()。
请参考setWorldMatrix()。
请参考xFormDev()和QWMatrix::map()。
返回从模式坐标中的矩形rv到系统坐标的变换。
如果世界变换生效并且已经指定旋转或者裁剪,那么边界矩形被返回。
请参考xFormDev()和QWMatrix::map()。
返回从模式坐标中的点的数组av到系统坐标的变换。
请参考xFormDev()和QWMatrix::map()。
返回从模式坐标中的点的数组av到系统坐标的变换。index是数组中的第一个点并且npoints表示被变换的点的个数。如果npoints为负数,数组中从av[index]开始的所有点都被变换。
返回数组由所有变换后的点组成。
实例:
QPointArray a(10);
QPointArray b;
b = painter.xForm(a, 2, 4); // b.size() == 4
b = painter.xForm(a, 2, -1); // b.size() == 8
请参考xFormDev()和QWMatrix::map()。
返回从系统坐标中的矩形rd到模式坐标的变换。
如果世界变换生效并且已经指定旋转或者裁剪,那么边界矩形被返回。
请参考xForm()和QWMatrix::map()。
返回从系统坐标中的点pd到模式坐标的变换。
请参考xForm()和QWMatrix::map()。
返回从系统坐标中的点的数组ad到模式坐标的变换。
请参考xForm()和QWMatrix::map()。
返回从系统坐标中的点的数组ad到模式坐标的变换。index是数组中的第一个点并且npoints表示被变换的点的个数。如果npoints为负数,数组中从ad[index]开始的所有点都被变换。
返回数组由所有变换后的点组成。
实例:
QPointArray a(10);
QPointArray b;
b = painter.xFormDev(a, 1, 3); // b.size() == 3
b = painter.xFormDev(a, 1, -1); // b.size() == 9
请参考xForm()和QWMatrix::map()。
#include <qdrawutil.h>
使用绘图工具p绘制由(x、y、w、h)指定的简单矩形。
颜色参数c指定了线的颜色。
lineWidth参数指定了线宽。
只要fill不为0,矩形内部就被*fill画刷填充。
如果你想使用一个QFrame窗口部件替代,你可以把它显示为一个简单矩形,例如QFrame::setFrameStyle( QFrame::Box | QFrame::Plain )。
警告:这个函数不会考虑QWidget::style()或者QApplication::style()。在QStyle中使用这个绘制函数可以使窗口部件遵循当前图形用户界面风格。
请参考qDrawShadeRect()和QStyle::drawPrimitive()。
#include <qdrawutil.h>
使用绘图工具p绘制水平的(y1 == y2)或者垂直的(x1 == x2)阴影线。
如果y1 != y2并且x1 != x2(也就是说这个线既不是水平的也不是垂直的),就什么也不绘制。
颜色组参数g指定了阴影色(light、dark和middle色)。
如果sunken为真,线看起来下陷,或者如果sunken为假,线看起来上凸。
lineWidth参数指定了每条线的线宽。它不是总线宽。
midLineWidth参数指定了使用QColorGroup::mid()颜色绘制的中间线的宽度。
如果你想使用一个QFrame窗口部件替代,你可以把它显示为一个简单阴影线,例如QFrame::setFrameStyle( QFrame::HLine | QFrame::Sunken )。
警告:这个函数不会考虑QWidget::style()或者QApplication::style()。在QStyle中使用这个绘制函数可以使窗口部件遵循当前图形用户界面风格。
请参考qDrawShadeRect()、qDrawShadePanel()和QStyle::drawPrimitive()。
#include <qdrawutil.h>
使用绘图工具p绘制由(x、y、w、h)指定的阴影面板。
颜色组参数g指定了阴影色(light、dark和middle色)。
如果sunken为真,面板看起来下陷,或者如果sunken为假,面板看起来上凸。
lineWidth参数指定了线宽。
只要fill不为0,面板内部就被*fill画刷填充。
如果你想使用一个QFrame窗口部件替代,你可以把它显示为一个阴影面板,例如QFrame::setFrameStyle( QFrame::Panel | QFrame::Sunken )。
警告:这个函数不会考虑QWidget::style()或者QApplication::style()。在QStyle中使用这个绘制函数可以使窗口部件遵循当前图形用户界面风格。
请参考qDrawWinPanel()、qDrawShadeLine()、qDrawShadeRect()和QStyle::drawPrimitive()。
#include <qdrawutil.h>
使用绘图工具p绘制由(x、y、w、h)指定的阴影矩形。
颜色组参数g指定了阴影色(light、dark和middle色)。
如果sunken为真,矩形看起来下陷,或者如果sunken为假,矩形看起来上凸。
lineWidth参数指定了每条线的线宽。它不是总线宽。
midLineWidth参数指定了使用QColorGroup::mid()颜色绘制的中间线的宽度。
只要fill不为0,矩形内部就被*fill画刷填充。
如果你想使用一个QFrame窗口部件替代,你可以把它显示为一个阴影矩形,例如QFrame::setFrameStyle( QFrame::Box | QFrame::Raised )。
警告:这个函数不会考虑QWidget::style()或者QApplication::style()。在QStyle中使用这个绘制函数可以使窗口部件遵循当前图形用户界面风格。
请参考qDrawShadeLine()、qDrawShadePanel()、qDrawPlainRect()、QStyle::drawItem()、QStyle::drawControl()和QStyle::drawComplexControl()。
#include <qdrawutil.h>
使用绘图工具p绘制由(x、y、w、h)指定的Windows风格的按钮。
颜色组参数g指定了阴影色(light、dark和middle色)。
如果sunken为真,按钮看起来下陷,或者如果sunken为假,按钮看起来上凸。
线宽为2像素。
只要fill不为0,按钮内部就被*fill画刷填充。
警告:这个函数不会考虑QWidget::style()或者QApplication::style()。在QStyle中使用这个绘制函数可以使窗口部件遵循当前图形用户界面风格。
请参考qDrawWinPanel()和QStyle::drawControl()。
#include <qdrawutil.h>
使用绘图工具p绘制由(x、y、w、h)指定的Windows风格的面板。
颜色组参数g指定了阴影色(light、dark和middle色)。
如果sunken为真,面板看起来下陷,或者如果sunken为假,面板看起来上凸。
线宽为2像素。
只要fill不为0,面板内部就被*fill画刷填充。
如果你想使用一个QFrame窗口部件替代,你可以把它显示为一个Windows风格的面板,例如QFrame::setFrameStyle( QFrame::WinPanel | QFrame::Raised )。
警告:这个函数不会考虑QWidget::style()或者QApplication::style()。在QStyle中使用这个绘制函数可以使窗口部件遵循当前图形用户界面风格。
请参考qDrawShadePanel()、qDrawWinButton()和QStyle::drawPrimitive()。
这个文件是Qt工具包一部分。 版权所有 © 1995-2002 Trolltech。保留所有权利。
| Copyright © 2002 Trolltech | Trademarks | 译者:Cavendish | Qt 3.0.5版
|