返回介绍

QPainter类

发布于 2019-10-04 15:01:55 字数 51699 浏览 1203 评论 0 收藏 0

QPainter类低水平的绘制,例如在窗口部件上。 详情请见……

#include <qpainter.h>

继承了Qt。

被QDirectPainter继承。

所有成员函数的列表。

公有成员

  • enum CoordinateMode { CoordDevice, CoordPainter }
  • QPainter ()
  • QPainter ( constQPaintDevice*pd, boolunclipped = FALSE )
  • QPainter ( constQPaintDevice*pd, constQWidget*copyAttributes, boolunclipped = FALSE )
  • ~QPainter ()
  • bool begin ( constQPaintDevice*pd, boolunclipped = FALSE )
  • bool begin ( constQPaintDevice*pd, constQWidget*copyAttributes, boolunclipped = FALSE )
  • bool end ()
  • QPaintDevice * device () const
  • QGfx * internalGfx ()
  • bool isActive () const
  • void flush ( constQRegion&region, CoordinateModecm = CoordDevice )
  • void flush ()
  • void save ()
  • void restore ()
  • QFontMetrics fontMetrics () const
  • QFontInfo fontInfo () const
  • const QFont & font () const
  • void setFont ( constQFont&font )
  • const QPen & pen () const
  • void setPen ( constQPen&pen )
  • void setPen ( PenStylestyle )
  • void setPen ( constQColor&color )
  • const QBrush & brush () const
  • void setBrush ( constQBrush&brush )
  • void setBrush ( BrushStylestyle )
  • void setBrush ( constQColor&color )
  • QPoint pos () const
  • const QColor & backgroundColor () const
  • void setBackgroundColor ( constQColor&c )
  • BGMode backgroundMode () const
  • void setBackgroundMode ( BGModem )
  • RasterOp rasterOp () const
  • void setRasterOp ( RasterOpr )
  • const QPoint & brushOrigin () const
  • void setBrushOrigin ( intx, inty )
  • void setBrushOrigin ( constQPoint&p )
  • bool hasViewXForm () const
  • bool hasWorldXForm () const
  • void setViewXForm ( boolenable )
  • QRect window () const
  • void setWindow ( constQRect&r )
  • void setWindow ( intx, inty, intw, inth )
  • QRect viewport () const
  • void setViewport ( constQRect&r )
  • void setViewport ( intx, inty, intw, inth )
  • void setWorldXForm ( boolenable )
  • const QWMatrix & worldMatrix () const
  • void setWorldMatrix ( constQWMatrix&m, boolcombine = FALSE )
  • void saveWorldMatrix () (obsolete)
  • void restoreWorldMatrix () (obsolete)
  • void scale ( doublesx, doublesy )
  • void shear ( doublesh, doublesv )
  • void rotate ( doublea )
  • void translate ( doubledx, doubledy )
  • void resetXForm ()
  • QPoint xForm ( constQPoint&pv ) const
  • QRect xForm ( constQRect&rv ) const
  • QPointArray xForm ( constQPointArray&av ) const
  • QPointArray xForm ( constQPointArray&av, intindex, intnpoints ) const
  • QPoint xFormDev ( constQPoint&pd ) const
  • QRect xFormDev ( constQRect&rd ) const
  • QPointArray xFormDev ( constQPointArray&ad ) const
  • QPointArray xFormDev ( constQPointArray&ad, intindex, intnpoints ) const
  • void setClipping ( boolenable )
  • bool hasClipping () const
  • QRegion clipRegion ( CoordinateModem = CoordDevice ) const
  • void setClipRect ( constQRect&r, CoordinateModem = CoordDevice )
  • void setClipRect ( intx, inty, intw, inth, CoordinateModem = CoordDevice )
  • void setClipRegion ( constQRegion&rgn, CoordinateModem = CoordDevice )
  • void drawPoint ( intx, inty )
  • void drawPoint ( constQPoint&p )
  • void drawPoints ( constQPointArray&a, intindex = 0, intnpoints = -1 )
  • void moveTo ( intx, inty )
  • void moveTo ( constQPoint&p )
  • void lineTo ( intx, inty )
  • void lineTo ( constQPoint&p )
  • void drawLine ( intx1, inty1, intx2, inty2 )
  • void drawLine ( constQPoint&p1, constQPoint&p2 )
  • void drawRect ( intx, inty, intw, inth )
  • void drawRect ( constQRect&r )
  • void drawWinFocusRect ( intx, inty, intw, inth )
  • void drawWinFocusRect ( intx, inty, intw, inth, constQColor&bgColor )
  • void drawWinFocusRect ( constQRect&r )
  • void drawWinFocusRect ( constQRect&r, constQColor&bgColor )
  • void drawRoundRect ( intx, inty, intw, inth, intxRnd = 25, intyRnd = 25 )
  • void drawRoundRect ( constQRect&r, intxRnd = 25, intyRnd = 25 )
  • void drawEllipse ( intx, inty, intw, inth )
  • void drawEllipse ( constQRect&r )
  • void drawArc ( intx, inty, intw, inth, inta, intalen )
  • void drawArc ( constQRect&r, inta, intalen )
  • void drawPie ( intx, inty, intw, inth, inta, intalen )
  • void drawPie ( constQRect&r, inta, intalen )
  • void drawChord ( intx, inty, intw, inth, inta, intalen )
  • void drawChord ( constQRect&r, inta, intalen )
  • void drawLineSegments ( constQPointArray&a, intindex = 0, intnlines = -1 )
  • void drawPolyline ( constQPointArray&a, intindex = 0, intnpoints = -1 )
  • void drawPolygon ( constQPointArray&a, boolwinding = FALSE, intindex = 0, intnpoints = -1 )
  • void drawConvexPolygon ( constQPointArray&pa, intindex = 0, intnpoints = -1 )
  • void drawCubicBezier ( constQPointArray&a, intindex = 0 )
  • void drawPixmap ( intx, inty, constQPixmap&pixmap, intsx = 0, intsy = 0, intsw = -1, intsh = -1 )
  • void drawPixmap ( constQPoint&p, constQPixmap&pm, constQRect&sr )
  • void drawPixmap ( constQPoint&p, constQPixmap&pm )
  • void drawPixmap ( constQRect&r, constQPixmap&pm )
  • void drawImage ( intx, inty, constQImage&image, intsx = 0, intsy = 0, intsw = -1, intsh = -1, intconversionFlags = 0 )
  • void drawImage ( const QPoint &, const QImage &, constQRect&sr, intconversionFlags = 0 )
  • void drawImage ( constQPoint&p, constQImage&i, intconversion_flags = 0 )
  • void drawImage ( constQRect&r, constQImage&i )
  • void drawTiledPixmap ( intx, inty, intw, inth, constQPixmap&pixmap, intsx = 0, intsy = 0 )
  • void drawTiledPixmap ( constQRect&r, constQPixmap&pm, constQPoint&sp )
  • void drawTiledPixmap ( constQRect&r, constQPixmap&pm )
  • void drawPicture ( constQPicture&pic ) (obsolete)
  • void drawPicture ( intx, inty, constQPicture&pic )
  • void drawPicture ( constQPoint&p, constQPicture&pic )
  • void fillRect ( intx, inty, intw, inth, constQBrush&brush )
  • void fillRect ( constQRect&r, constQBrush&brush )
  • void eraseRect ( intx, inty, intw, inth )
  • void eraseRect ( constQRect&r )
  • enum TextDirection { Auto, RTL, LTR }
  • void drawText ( intx, inty, const QString &, intlen = -1, TextDirectiondir = Auto )
  • void drawText ( const QPoint &, const QString &, intlen = -1, TextDirectiondir = Auto )
  • void drawText ( intx, inty, const QString &, intpos, intlen, TextDirectiondir = Auto )
  • void drawText ( constQPoint&p, const QString &, intpos, intlen, TextDirectiondir = Auto )
  • void drawText ( intx, inty, intw, inth, intflags, const QString &, intlen = -1, QRect*br = 0, QTextParag**internal = 0 )
  • void drawText ( constQRect&r, inttf, constQString&str, intlen = -1, QRect*brect = 0, QTextParag**internal = 0 )
  • QRect boundingRect ( intx, inty, intw, inth, intflags, const QString &, intlen = -1, QTextParag**intern = 0 )
  • QRect boundingRect ( constQRect&r, intflags, constQString&str, intlen = -1, QTextParag**internal = 0 )
  • int tabStops () const
  • void setTabStops ( intts )
  • int * tabArray () const
  • void setTabArray ( int*ta )
  • HDC handle () const

静态公有成员

  • void redirect ( QPaintDevice*pdev, QPaintDevice*replacement )

相关函数

  • void qDrawShadeLine ( QPainter*p, intx1, inty1, intx2, inty2, constQColorGroup&g, boolsunken, intlineWidth, intmidLineWidth )
  • void qDrawShadeRect ( QPainter*p, intx, inty, intw, inth, constQColorGroup&g, boolsunken, intlineWidth, intmidLineWidth, constQBrush*fill )
  • void qDrawShadePanel ( QPainter*p, intx, inty, intw, inth, constQColorGroup&g, boolsunken, intlineWidth, constQBrush*fill )
  • void qDrawWinButton ( QPainter*p, intx, inty, intw, inth, constQColorGroup&g, boolsunken, constQBrush*fill )
  • void qDrawWinPanel ( QPainter*p, intx, inty, intw, inth, constQColorGroup&g, boolsunken, constQBrush*fill )
  • void qDrawPlainRect ( QPainter*p, intx, inty, intw, inth, constQColor&c, intlineWidth, constQBrush*fill )

详细描述

QPainter类低水平的绘制,例如在窗口部件上。

绘制工具为做到绝大部分绘制图形用户界面程序的需要提供了高度优化的函数。QPainter可以绘制从简单的直线到像饼图和弦这样的复杂形状。它也可以绘制排列的文本和像素映射。通常,它在一个“自然的”坐标系统中绘制,但是它也可以在视和世界转换中做到这些。

绘图工具的典型用法是:

  • 构造一个绘图工具。
  • 设置画笔、画刷等等。
  • 绘制。
  • 销毁这个绘图工具。

绝大多数情况下,所有这些是在一个绘制事件中完成的。(实际上,99%的QPainter使用是在QWidget::paintEvent()的重新实现中,并且绘制工具已经为这种用法高度优化了。)这里是一个非常简单的实例:

    void SimpleExampleWidget::paintEvent()
    {
        QPainter paint( this );
        paint.setPen( Qt::blue );
        paint.drawText( rect(), AlignCenter, "The Text" );
    }
    

使用方法很简单并且这里有你可以使用的许多设置:

  • font()是当前设置的字体。如果你设置一个不可用的字体,Qt会找到一个相近的匹配。实际上,font()返回你使用setFont() 所设置的东西并且fontInfo()返回你实际使用的字体(这也许是相同的)。

  • brush()是当前设置的画刷,用来填充例如圆的颜色或者调色板。

  • pen()是当前设置的画笔,用来画线或者边缘的颜色或者点画。

  • backgroundMode()是Opaque或者Transparent,也就是是不是使用backgroundColor()。

  • 仅仅当backgroundMode()为Opaque并且pen()是一个点画的时候backgroundColor()才适用,它描述了在点画中背景像素的颜色。

  • rasterOp()是像素绘制和已经存在的像素是如何相互作用的。

  • brushOrigin()是平铺的画刷的原点,通常是窗口的原点。

  • viewport()、window()、worldMatrix()和很多其它的构成了绘制工具的坐标转换系统。关于这个的解释请参考坐标系统或者参考下面有关这些函数的非常简要的概述。

  • clipping()是指绘制工具是否裁剪。(绘制设备也裁剪。)如果绘制工具裁剪,它裁剪到clipRegion()。

  • pos()是当前位置,通过moveTo()设置并且通过lineTo()使用。

注意这些设置中的一些会镜像到一些绘制设备的设置中,例如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、应用程序预演、坐标系统概述、图像类和图像处理类。


成员类型文档

QPainter::CoordinateMode

  • QPainter::CoordDevice
  • QPainter::CoordPainter

请参考clipRegion()。

QPainter::TextDirection

  • QPainter::Auto
  • QPainter::RTL - 从右到左
  • QPainter::LTR - 从左到右

请参考drawText()。


成员函数文档

QPainter::QPainter ()

构造绘制工具。

注意所有绘制工具的设置(setPen、setBrush等等)在当begin()被调用时会被重新设置为默认值。

请参考begin()和end()。

QPainter::QPainter ( constQPaintDevice*pd, boolunclipped = FALSE )

构造一个立即开始在绘制设备pd绘制的绘制工具。如果unclipped为真,依赖于底层图形系统,绘制工具将在绘制设备的子对象上绘制。

这个构造函数对短期的绘制工具是很方便的,例如,在一个绘制事件中并且也该被立即使用。构造函数为你调用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()和end()。

QPainter::QPainter ( constQPaintDevice*pd, constQWidget*copyAttributes, boolunclipped = FALSE )

构造一个立即开始在绘制设备pd绘制的绘制工具,默认参数来自于copyAttributes。如果unclipped为真,依赖于底层图形系统,绘制工具将在绘制设备的子对象上绘制(尽管这个不是在所有平台上都被支持)。

请参考begin()。

QPainter::~QPainter ()

销毁绘制工具。

constQColor& QPainter::backgroundColor () const

返回当前背景色。

请参考setBackgroundColor()和QColor。

BGMode QPainter::backgroundMode () const

返回当前背景模式。

请参考setBackgroundMode()和BGMode。

bool QPainter::begin ( constQPaintDevice*pd, boolunclipped = FALSE )

开始在绘制设备pd上绘制并且如果成功返回真,否则返回假。如果unclipped为真,绘制在绘制设备的边缘将不会被裁剪(尽管这不是在所有平台上被支持)。

发生的错误是严重的问题,例如这些:

        p->begin( 0 ); // 不可能——绘制设备不能为0

        QPixmap pm( 0, 0 );
        p->begin( pm ); // 不可能——pm.isNull();

        p->begin( myWidget );
        p2->begin( myWidget ); // 不可能——在同一时间只能有一个绘制工具
    

注意绝大部分时间,你可以使用一个构造函数来代替begin(),并且end()会在析构函数中被自动完成。

警告:在同一时间绘制设备上只能有一个绘制工具。

请参考end()和flush()。

实例:aclock/aclock.cpp、application/application.cpp、desktop/desktop.cpp、hello/hello.cpp、picture/picture.cpp、t10/cannon.cpp和xform/xform.cpp。

bool QPainter::begin ( constQPaintDevice*pd, constQWidget*copyAttributes, boolunclipped = FALSE )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

这个版本在绘制设备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()。

QRect QPainter::boundingRect ( intx, inty, intw, inth, intflags, constQString&, intlen = -1, QTextParag**intern = 0 )

返回相对应的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。

QRect QPainter::boundingRect ( constQRect&r, intflags, constQString&str, intlen = -1, QTextParag**internal = 0 )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

返回相对应的drawText()函数所要打印的对齐的文本的边界矩形,如果len>-1,使用字符串的len个字符,或者如果len为-1,使用整个字符串。绘制已经相应的边界矩形,由矩形r来约束。

intern参数不应该被使用。

请参考drawText()、fontMetrics()、QFontMetrics::boundingRect()和Qt::TextFlags。

constQBrush& QPainter::brush () const

返回绘制工具的当前画刷。

请参考QPainter::setBrush()。

实例:themes/metal.cpp和themes/wood.cpp。

constQPoint& QPainter::brushOrigin () const

返回画刷原点的当前设置。

请参考setBrushOrigin()。

QRegion QPainter::clipRegion ( CoordinateModem = CoordDevice ) const

返回当前设置的裁剪区域。注意裁剪区域是在物理设备坐标内给定的并且如果m是CoordDevice(默认),不服从任何坐标变换。如果m是CoordPainter,返回的区域是在模型坐标中。

请参考setClipRegion()、setClipRect()、setClipping()和QPainter::CoordinateMode。

实例: themes/wood.cpp。

QPaintDevice* QPainter::device () const

返回绘制工具当前正在绘制的绘制设备,如果绘制工具没有激活,返回0。

请参考QPaintDevice::paintingActive()。

实例:helpviewer/helpwindow.cpp和listboxcombo/listboxcombo.cpp。

void QPainter::drawArc ( intx, inty, intw, inth, inta, intalen )

绘制由矩形(x, y, w, h)确定的弧,开始角度为a,并且弧长为alen

角度aalen是1/16度,也就是说一个完整的圆等于5760(16*360)。正数的aalen意味着逆时针方向并且负值意味着顺时针方向。0度在3点的时钟位置。

实例:

        QPainter p( myWidget );
        p.drawArc( 10,10, 70,100, 100*16, 160*16 ); // 绘制一个“(”这样的弧
    

请参考drawPie()和drawChord()。

void QPainter::drawArc ( constQRect&r, inta, intalen )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

绘制由矩形r确定的弧,开始角度为a,并且弧长为alen

void QPainter::drawChord ( intx, inty, intw, inth, inta, intalen )

绘制由矩形(x, y, w, h)确定的弦,开始角度为a,并且弧长为alen

这个弦由当前brush()填充。

角度aalen是1/16度,也就是说一个完整的圆等于5760(16*360)。正数的aalen意味着逆时针方向并且负值意味着顺时针方向。0度在3点的时钟位置。

请参考drawArc()和drawPie()。

void QPainter::drawChord ( constQRect&r, inta, intalen )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

绘制由矩形r确定的弦,开始角度为a,并且弧长为alen

void QPainter::drawConvexPolygon ( constQPointArray&pa, intindex = 0, intnpoints = -1 )

绘制pa中从pa[index]开始(index默认为0)的npoints个点确定的凸多边形。

如果提供的多边形不是凸的,结果是不确定的。

在一些平台上(例如X窗口),这个比drawPolygon()更快。

实例: aclock/aclock.cpp。

void QPainter::drawCubicBezier ( constQPointArray&a, intindex = 0 )

绘制a中从a[index]开始(index默认为0)的控制点确定的三次贝塞尔曲线。

a[index + 3]之后的控制点被忽略。如果没有足够的控制点,就什么也不发生。

void QPainter::drawEllipse ( intx, inty, intw, inth )

绘制中心在(x + w/2, y + h/2)并且大小为(w, h)的椭圆。

实例:drawdemo/drawdemo.cpp、picture/picture.cpp和tictac/tictac.cpp。

void QPainter::drawEllipse ( constQRect&r )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

绘制在r内适合的的椭圆。

void QPainter::drawImage ( intx, inty, constQImage&image, intsx = 0, intsy = 0, intsw = -1, intsh = -1, intconversionFlags = 0 )

在(x, y)点绘制从(sx, sy)开始,swsh分别为宽高的像素区域,如果图片需要被转换为像素映射,使用conversionFlagsconversionFlags的默认值为0,关于其它值有什么作用请参考convertFromImage()。

如果device()是QPixmap或QWidget,这个函数可以把image转换为像素映射然后再绘制它;如果device()是QPrinter或QPicture,它会直接绘制它。

当在QPrinter上绘制时,图像中的alpha掩码将被忽略。

请参考drawPixmap()和QPixmap::convertFromImage()。

实例: canvas/canvas.cpp。

void QPainter::drawImage ( constQPoint&, constQImage&, constQRect&sr, intconversionFlags = 0 )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

在给定的点绘制图像中的矩形sr

void QPainter::drawImage ( constQPoint&p, constQImage&i, intconversion_flags = 0 )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

在点p绘制图像i

如果图像需要被修改来适应低分辨率的结果(例如从32位转换为8位),使用conversion_flags来指定你希望发生什么。

请参考Qt::ImageConversionFlags。

void QPainter::drawImage ( constQRect&r, constQImage&i )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

在矩形r中绘制图像i。如果图像和矩形的大小不同,图像将被伸缩来适应矩形。

void QPainter::drawLine ( intx1, inty1, intx2, inty2 )

绘制从(x1, y1)到(x2, y2)的直线并且设置当前画笔位置为(x2, y2)。

请参考pen()。

实例:aclock/aclock.cpp、drawlines/connect.cpp、progress/progress.cpp、splitter/splitter.cpp、themes/metal.cpp和themes/wood.cpp。

void QPainter::drawLine ( constQPoint&p1, constQPoint&p2 )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

绘制从点p1到点p2的直线。

void QPainter::drawLineSegments ( constQPointArray&a, intindex = 0, intnlines = -1 )

绘制a中,从a[index]开始(index默认为0)的点确定的nlines条分隔的线。如果nlines为-1(默认),直到数组结束所有的点都被使用(也就是绘制(a.size()-index)/2个线)。

绘制的第一条线是从a[index]a[index+1]。绘制的第二条线是从a[index+2]a[index+3],等等。

请参考drawPolyline()、drawPolygon()和QPen。

void QPainter::drawPicture ( intx, inty, constQPicture&pic )

在(x, y)重放图片pic

当这个函数被调用时,如果(x, y) = (0, 0),它就和QPicture::play()一样了。

实例:picture/picture.cpp和xform/xform.cpp。

void QPainter::drawPicture ( constQPicture&pic )

这个函数是废弃的。它的提供只是为了保证旧代码能够工作。我们强烈建议在新代码中不要使用它。

使用另外一个(0, 0)位移的QPainter::drawPicture()函数来替代它。

void QPainter::drawPicture ( constQPoint&p, constQPicture&pic )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

在点p绘制图片pic

void QPainter::drawPie ( intx, inty, intw, inth, inta, intalen )

绘制由矩形(x, y, w, h)确定的饼图,开始角度为a,并且弧长为alen

这个饼图由当前的brush()填充。

角度aalen是1/16度,也就是说一个完整的圆等于5760(16*360)。正数的aalen意味着逆时针方向并且负值意味着顺时针方向。0度在3点的时钟位置。

请参考drawArc()和drawChord()。

实例:drawdemo/drawdemo.cpp、grapher/grapher.cpp、t10/cannon.cpp和t9/cannon.cpp。

void QPainter::drawPie ( constQRect&r, inta, intalen )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

绘制由矩形r确定的饼图,开始角度为a,并且弧长为alen

void QPainter::drawPixmap ( intx, inty, constQPixmap&pixmap, intsx = 0, intsy = 0, intsw = -1, intsh = -1 )

通过把pixmap的一部分复制到绘制设备中,在(x, y)绘制一个像素映射。

(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。

void QPainter::drawPixmap ( constQPoint&p, constQPixmap&pm, constQRect&sr )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

绘制像素映射pm中的矩形sr,原点就放在点p处。

void QPainter::drawPixmap ( constQPoint&p, constQPixmap&pm )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

绘制像素映射pm,原点就放在点p处。

void QPainter::drawPixmap ( constQRect&r, constQPixmap&pm )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

在矩形r中绘制像素映射pm。如果像素映射和矩形大小不同,像素映射被拉伸来适合这个矩形。

void QPainter::drawPoint ( intx, inty )

使用当前画笔在(x, y)绘制一个单一点。

请参考QPen。

实例:desktop/desktop.cpp和drawlines/connect.cpp。

void QPainter::drawPoint ( constQPoint&p )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

绘制点p

void QPainter::drawPoints ( constQPointArray&a, intindex = 0, intnpoints = -1 )

使用当前画笔绘制一组点a

如果index为非零(默认为0),只有从index开始的点被绘制。如果npoints为负数(默认),从index开始剩余的所有点都被绘制。如果index为0或者正数,则index个点被绘制。

void QPainter::drawPolygon ( constQPointArray&a, boolwinding = FALSE, intindex = 0, intnpoints = -1 )

绘制a中,从a[index]开始(index默认为0)的npoints个点确定的多边形。

如果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。

void QPainter::drawPolyline ( constQPointArray&a, intindex = 0, intnpoints = -1 )

绘制a中,从a[index]开始(index默认为0)的npoints个点确定的多边形。

如果npoints为-1(默认),直到数组的最后的所有点都被使用(也就是说a.size()-index条线确定的多边形)。

请参考drawLineSegments()、drawPolygon()和QPen。

实例:scribble/scribble.cpp和themes/metal.cpp。

void QPainter::drawRect ( intx, inty, intw, inth )

绘制左上角在(x, y)并且宽为w、高为h的矩形。

请参考QPen和drawRoundRect()。

实例:drawdemo/drawdemo.cpp、picture/picture.cpp、t10/cannon.cpp、t11/cannon.cpp、t9/cannon.cpp、tooltip/tooltip.cpp和trivial/trivial.cpp。

void QPainter::drawRect ( constQRect&r )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

绘制矩形r

void QPainter::drawRoundRect ( intx, inty, intw, inth, intxRnd = 25, intyRnd = 25 )

绘制左上角在(x, y)并且宽为w、高为h的圆角矩形。

xRndyRnd参数指定了角有多圆。0构成了直角,99是最圆。

宽和高包括所有的绘制的线。

请参考drawRect()和QPen。

实例:drawdemo/drawdemo.cpp和themes/wood.cpp。

void QPainter::drawRoundRect ( constQRect&r, intxRnd = 25, intyRnd = 25 )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

绘制一个圆角矩形r,在每个角的x位置xRnd、y位置yRnd绘制圆角。

void QPainter::drawText ( constQPoint&p, constQString&, intpos, intlen, TextDirectiondir = Auto )

在点p从位置pos开始绘制文本那。如果len为-1,整个字符串被绘制。否则只是绘制开始的len个字符。文本的方向由dir确定。

请参考QPainter::TextDirection。

实例:desktop/desktop.cpp、drawdemo/drawdemo.cpp、grapher/grapher.cpp、picture/picture.cpp、progress/progress.cpp、t8/cannon.cpp和trivial/trivial.cpp。

void QPainter::drawText ( intx, inty, constQString&, intlen = -1, TextDirectiondir = Auto )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

在位置(x, y)绘制给定文本。如果len为1,整个字符串被绘制。否则只是绘制开始的len个字符。文本的方向由dir确定。

请参考QPainter::TextDirection。

void QPainter::drawText ( constQPoint&, constQString&, intlen = -1, TextDirectiondir = Auto )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

在给定的点绘制文本。

请参考QPainter::TextDirection。

void QPainter::drawText ( intx, inty, constQString&, intpos, intlen, TextDirectiondir = Auto )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

在点(x, y)从位置pos开始绘制文本那。如果len为-1,整个字符串被绘制。否则只是绘制开始的len个字符。文本的方向由dir确定。

void QPainter::drawText ( intx, inty, intw, inth, intflags, constQString&, intlen = -1, QRect*br = 0, QTextParag**internal = 0 )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

在从(x, y)开始,宽为w,高为h的矩形中绘制给定文本。如果len为-1,整个字符串被绘制。否则只是绘制开始的len个字符。文本的标记由flags参数中的Qt::AlignmentFlags和Qt::TextFlags或运算的结果给定。br(如果非零)参数只是在内部使用。

void QPainter::drawText ( constQRect&r, inttf, constQString&str, intlen = -1, QRect*brect = 0, QTextParag**internal = 0 )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

在矩形r中从str中绘制最多len个字符。

注意r.y()的意思和两个drawText()的变体不同。

这个函数绘制格式化的文本。tf文本格式是Qt::AlignmentFlags和Qt::TextFlags或运算的结果。

水平对齐方式默认为AlignAuto并且垂直对齐方式默认为AlignTop。

brect(如果非零)被设置为输出的矩形的实际边界。internal还是用于内部。

请参考boundingRect()。

void QPainter::drawTiledPixmap ( intx, inty, intw, inth, constQPixmap&pixmap, intsx = 0, intsy = 0 )

在指定的矩形中绘制平铺的pixmap

(x, y)指定了绘制设备的左上角,宽和高由wh给定。(sx, sy)指定了所要绘制的pixmap的左上角。默认为(0, 0)。

调用drawTiledPixmap()和在一个区域上使用一个像素映射多次调用drawPixmap()相似,但是根据底下的窗口系统,这个有更多潜在的效率。

请参考drawPixmap()。

void QPainter::drawTiledPixmap ( constQRect&r, constQPixmap&pm, constQPoint&sp )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

在原点在sp的矩形r中绘制平铺的pm

void QPainter::drawTiledPixmap ( constQRect&r, constQPixmap&pm )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

在矩形r中绘制平铺的pm

void QPainter::drawWinFocusRect ( intx, inty, intw, inth, constQColor&bgColor )

绘制一个左上角在(x, y)并且宽为w、高为h的窗口焦点矩形,使用的画笔颜色和bgColor形成反差。

这个函数绘制点画矩形(XOR不被使用)用来指出键盘焦点(当QApplication::style()是WindowStyle的时候)。

用来绘制矩形的画笔颜色不是黑色就是白色,依赖于bgColor的颜色(请参考QColor::gray())。

警告:如果坐标系统已经被旋转或者修剪,这个函数什么也不绘制。

请参考drawRect()和QApplication::style()。

void QPainter::drawWinFocusRect ( intx, inty, intw, inth )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

绘制一个左上角在(x, y)并且宽为w、高为h的窗口焦点矩形。

这个函数绘制点画矩形(XOR不被使用)用来指出键盘焦点(当QApplication::style()是WindowStyle的时候)。

警告:如果坐标系统已经被旋转或者修剪,这个函数什么也不绘制。

请参考drawRect()和QApplication::style()。

void QPainter::drawWinFocusRect ( constQRect&r )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

绘制矩形r作为窗口焦点矩形。

void QPainter::drawWinFocusRect ( constQRect&r, constQColor&bgColor )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

使用背景色bgColor绘制矩形r作为窗口焦点矩形。

bool QPainter::end ()

结束绘制。绘制时使用的任何资源都被释放。

注意虽然你几乎不需要调用end(),析构函数将会执行它,但是至少还有一种情况需要它,就是双重缓冲。

        QPainter p( myPixmap, this )
        // ...
        p.end(); // 停止在myPixmap上的绘制
        p.begin( this );
        p.drawPixmap( myPixmap );
    

因为当它正在被绘制的时候,你不能绘制一个QPixmap,它需要关闭激活的绘制工具。

请参考begin()和isActive()。

实例:aclock/aclock.cpp、application/application.cpp、desktop/desktop.cpp、hello/hello.cpp、picture/picture.cpp、t10/cannon.cpp和xform/xform.cpp。

void QPainter::eraseRect ( intx, inty, intw, inth )

擦除xywh中的区域。等价于fillRect( x, y, w, h, backgroundColor() )

实例:listboxcombo/listboxcombo.cpp和showimg/showimg.cpp。

void QPainter::eraseRect ( constQRect&r )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

擦除矩形r中的区域。

void QPainter::fillRect ( intx, inty, intw, inth, constQBrush&brush )

在矩形(x, y, w, h)中使用brush填充。

你可以指定QColor作为brush,因为QBrush的一个构造函数可以得到QColor参数并且创建一个实心模式的画刷。

请参考drawRect()。

实例:listboxcombo/listboxcombo.cpp、progress/progress.cpp、qdir/qdir.cpp、qfd/fontdisplayer.cpp、themes/metal.cpp和themes/wood.cpp。

void QPainter::fillRect ( constQRect&r, constQBrush&brush )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

在矩形r中使用brush填充。

void QPainter::flush ( constQRegion&region, CoordinateModecm = CoordDevice )

使用裁剪模式cm刷新在区域region中的任何缓存的绘制操作。

如果平台不支持刷新一个指定区域,这个刷新将更新整个设备。

请参考CoordinateMode。

void QPainter::flush ()

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

刷新任何缓存的绘制操作。

constQFont& QPainter::font () const

返回当前设置的绘图工具字体。

请参考setFont()和QFont。

实例: fileiconview/qfileiconview.cpp。

QFontInfo QPainter::fontInfo () const

如果绘图工具是激活的,返回绘图工具的字体信息。它不能获得未激活的绘图工具的字体信息,所以如果绘图工具未激活,返回值是未定义的。

请参考fontMetrics()和isActive()。

QFontMetrics QPainter::fontMetrics () const

如果绘图工具是激活的,返回绘图工具的字体规格。它不能获得未激活的绘图工具的字体规格,所以如果绘图工具未激活,返回值是未定义的。

请参考fontInfo()和isActive()。

实例:action/application.cpp、application/application.cpp、desktop/desktop.cpp、drawdemo/drawdemo.cpp、helpviewer/helpwindow.cpp、mdi/application.cpp和qwerty/qwerty.cpp。

HDC QPainter::handle () const

返回绘制中使用的由平台决定的句柄。使用这个函数是无法移植的。

bool QPainter::hasClipping () const

如果裁剪已经被设置,返回真,否则返回假。

请参考setClipping()。

实例: themes/wood.cpp。

bool QPainter::hasViewXForm () const

如果视转换生效,返回真,否则返回假。

请参考setViewXForm()和xForm()。

bool QPainter::hasWorldXForm () const

如果世界转换生效,返回真,否则返回假。

请参考setWorldXForm()。

bool QPainter::isActive () const

如果绘图工具正在激活绘制,也就是说begin()已经被调用并且end()还没有被调用,返回真,否则返回假。

请参考QPaintDevice::paintingActive()。

实例: desktop/desktop.cpp。

void QPainter::lineTo ( intx, inty )

绘制从当前画笔位置到(x, y)的线并且设置(x, y)为新的当前画笔位置。

请参考QPen、moveTo()、drawLine()和pos()。

void QPainter::lineTo ( constQPoint&p )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

绘制到典p的线。

void QPainter::moveTo ( intx, inty )

设置当前画笔位置为(x, y)

请参考lineTo()和pos()。

void QPainter::moveTo ( constQPoint&p )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

设置当前画笔位置为点p

constQPen& QPainter::pen () const

返回绘图工具的当前画笔。

请参考setPen()。

实例:progress/progress.cpp和themes/wood.cpp。

QPoint QPainter::pos () const

返回画笔的当前位置。

请参考moveTo()。

RasterOp QPainter::rasterOp () const

返回当前的光栅操作。

请参考setRasterOp()和RasterOp。

void QPainter::redirect ( QPaintDevice*pdev, QPaintDevice*replacement ) [static]

重定向绘制设备pdev的所有绘制指令到另一个绘制设备replacement,除非replacement为0。如果replacement为0,pdev的重定向被移除。

通常情况下,你将可能发现调用QPixmap::grabWidget()或者QPixmap::grabWindow()是更容易的解决方法。

void QPainter::resetXForm ()

重置使用translate()、scale()、shear()、rotate()、setWorldMatrix()、setViewport()和setWindow()完成的任何转换。

请参考worldMatrix()、viewport()和window()。

void QPainter::restore ()

恢复当前绘图工具状态(从栈中弹出一个保存的状态)。

请参考save()。

实例: aclock/aclock.cpp。

void QPainter::restoreWorldMatrix ()

这个函数是废弃的。它的提供只是为了保证旧代码能够工作。我们强烈建议在新代码中不要使用它。

我们建议使用restore()来替代它。

void QPainter::rotate ( doublea )

逆时针方向旋转坐标系统a度。

请参考translate()、scale()、shear()、resetXForm()、setWorldMatrix()和xForm()。

实例:aclock/aclock.cpp、t10/cannon.cpp和t9/cannon.cpp。

void QPainter::save ()

保存当前绘图工具状态(把状态压到栈中)。save()必须被一个相对应的restore()跟随。end()将释放栈。

请参考restore()。

实例: aclock/aclock.cpp。

void QPainter::saveWorldMatrix ()

这个函数是废弃的。它的提供只是为了保证旧代码能够工作。我们强烈建议在新代码中不要使用它。

我们建议使用save()来替代它。

void QPainter::scale ( doublesx, doublesy )

通过(sx, sy)拉伸坐标系统。

请参考translate()、shear()、rotate()、resetXForm()、setWorldMatrix()和xForm()。

实例: xform/xform.cpp。

void QPainter::setBackgroundColor ( constQColor&c )

设置绘图工具的背景色为c

背景色是当绘制不透明文本、点画线和位图时填充的颜色。背景色在透明背景模式(这是默认的)下无效。

请参考backgroundColor()、setBackgroundMode()和BackgroundMode。

void QPainter::setBackgroundMode ( BGModem )

设置绘图工具的背景模式为m,它必须是TransparentMode(默认)或者OpaqueMode。

透明模式绘制不设置背景像素绘制点画线和文本。不透明模式使用当前背景颜色填充这些空间。

注意为了绘制透明的位图和像素映射,你必须使用QPixmap::setMask()。

请参考backgroundMode()和setBackgroundColor()。

实例: picture/picture.cpp。

void QPainter::setBrush ( BrushStylestyle )

设置绘图工具的画刷为黑色和特定的style

请参考brush()和QBrush。

实例:aclock/aclock.cpp、drawdemo/drawdemo.cpp、picture/picture.cpp、t10/cannon.cpp、t9/cannon.cpp、themes/wood.cpp和tooltip/tooltip.cpp。

void QPainter::setBrush ( constQBrush&brush )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

设置绘图工具的画刷为brush

brush定义了外形如何被填充。

请参考brush()。

void QPainter::setBrush ( constQColor&color )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

设置绘图工具的画刷具有风格SolidPattern和特定的color

请参考brush()和QBrush。

void QPainter::setBrushOrigin ( intx, inty )

设置画刷原点为(x, y)

画刷原点指定绘图工具的画刷的(0, 0)坐标。这个设置只适用于模式画刷和像素映射画刷。

请参考brushOrigin()。

void QPainter::setBrushOrigin ( constQPoint&p )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

设置画刷原点为点p

void QPainter::setClipRect ( intx, inty, intw, inth, CoordinateModem = CoordDevice )

设置裁剪区域为矩形xywh并且使裁剪生效。裁剪模式被设置为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。

void QPainter::setClipRect ( constQRect&r, CoordinateModem = CoordDevice )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

设置裁剪区域为矩形r并且使裁剪生效。裁剪模式被设置为m

请参考CoordinateMode。

void QPainter::setClipRegion ( constQRegion&rgn, CoordinateModem = CoordDevice )

设置裁剪区域为rgn并且使裁剪生效。裁剪模式被设置为m

注意裁剪区域是在物理设备坐标中给定的并且服从任何坐标转换。

请参考setClipRect()、clipRegion()、setClipping()和CoordinateMode。

实例:qfd/fontdisplayer.cpp和themes/wood.cpp。

void QPainter::setClipping ( boolenable )

如果enable为真,使裁剪生效,或者如果enable为假,使裁剪失效。

请参考hasClipping()、setClipRect()和setClipRegion()。

实例: themes/wood.cpp。

void QPainter::setFont ( constQFont&font )

设置绘图工具的字体为font

这个字体被后面的drawText()函数使用。文本颜色和画笔颜色相同。

请参考font()和drawText()。

实例:application/application.cpp、drawdemo/drawdemo.cpp、grapher/grapher.cpp、hello/hello.cpp、picture/picture.cpp、t13/cannon.cpp和xform/xform.cpp。

void QPainter::setPen ( constQPen&pen )

设置新的绘图工具画笔。

pen定义了如何绘制线和轮廓,并且它也定义了文本颜色。

请参考pen()。

实例:desktop/desktop.cpp、drawdemo/drawdemo.cpp、progress/progress.cpp、t10/cannon.cpp、t9/cannon.cpp、themes/metal.cpp和themes/wood.cpp。

void QPainter::setPen ( PenStylestyle )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

设置绘图工具画笔有风格style、宽为0并且为黑色。

请参考pen()和QPen。

void QPainter::setPen ( constQColor&color )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

设置绘图工具画笔有风格SolidLine、宽为0并且为特定的color

请参考pen()和QPen。

void QPainter::setRasterOp ( RasterOpr )

设置光栅操作为r。默认为CopyROP。

请参考rasterOp()和Qt::RasterOp。

void QPainter::setTabArray ( int*ta )

设置tab stop数组为ta。这将把tab stop放到ta[0]ta[1]等等。这个数组是以零结束的。

如果tab数组和tab stop大小被设置,tab数组先生效。

请参考tabArray()、setTabStops()、drawText()和fontMetrics()。

void QPainter::setTabStops ( intts )

设置tab stop宽度为ts,也就是说在ts、2*ts、3*ts等等定位tab stop。

当绘制设置了ExpandTabs的格式化文本时,tab stop被用到。只有在没有tab数组被设置(这是默认的情况)的情况下,这个确定的tab stop值被使用。

请参考tabStops()、setTabArray()、drawText()和fontMetrics()。

void QPainter::setViewXForm ( boolenable )

如果enable为真,使视转换生效,或者如果enable为假,使视转换失效。

请参考hasViewXForm()、setWindow()、setViewport()、setWorldMatrix()、setWorldXForm()和xForm()。

void QPainter::setViewport ( intx, inty, intw, inth )

设置绘图工具的视口矩形视转换并且使视转换生效。

视口矩形是视转换的一部分。视口指定了设备坐标系统并且被xyw宽和h高参数指定。它的姐妹window()指定了逻辑坐标系统。

默认视口矩形和设备矩形一样。关于坐标转换的概述请参考坐标系统概述。

请参考viewport()、setWindow()、setViewXForm()、setWorldMatrix()、setWorldXForm()和xForm()。

实例: aclock/aclock.cpp。

void QPainter::setViewport ( constQRect&r )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

设置绘图工具的视口为矩形r

void QPainter::setWindow ( intx, inty, intw, inth )

设置绘图工具的窗口矩形视转换并且使视转换生效。

窗口矩形是视转换的一部分。窗口指定了逻辑坐标系统并且被xyw宽和h高参数指定。它的姐妹viewport()指定了设备坐标系统。

默认窗口矩形和设备矩形一样。关于坐标转换的概述请参考坐标系统概述。

请参考window()、setViewport()、setViewXForm()、setWorldMatrix()和setWorldXForm()。

实例:aclock/aclock.cpp和drawdemo/drawdemo.cpp。

void QPainter::setWindow ( constQRect&r )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

设置绘图工具的窗口为矩形r

void QPainter::setWorldMatrix ( constQWMatrix&m, boolcombine = FALSE )

设置世界变换矩阵为m并且使世界变换生效。

如果combine为真,那么m与当前变换矩阵组合,否则m替代当前变换矩阵。

如果m是单位矩阵并且combine为假,这个函数调用setWorldXForm(FALSE)。(单位矩阵是QWMatrix::m11()和QWMatrix::m22()为1.0并且其它为0.0的矩阵。)

在视变换(也就是window和viewport)之后世界变换被应用。

下列的函数不使用QWMatrix就可以转换坐标系统:

  • translate()
  • scale()
  • shear()
  • rotate()

它们在绘制工具的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。

void QPainter::setWorldXForm ( boolenable )

如果enable为真,使世界变换生效,或者如果enable为假,使世界变换失效。世界变换矩阵不被改变。

请参考setWorldMatrix()、setWindow()、setViewport()、setViewXForm()和xForm()。

void QPainter::shear ( doublesh, doublesv )

使用(sh, sv)来裁剪坐标系统。

请参考translate()、scale()、rotate()、resetXForm()、setWorldMatrix()和xForm()。

int * QPainter::tabArray () const

返回当前设置的tab stop数组。

请参考setTabArray()。

int QPainter::tabStops () const

返回当前的tab stop设置。

请参考setTabStops()。

void QPainter::translate ( doubledx, doubledy )

使用(dx, dy)变换坐标系统。这次调用之后,(dx, dy)被添加到所有点上。

例如,下面这个代码在同一个点上绘制两次:

        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。

QRect QPainter::viewport () const

返回视口矩形。

请参考setViewport()和setViewXForm()。

实例: aclock/aclock.cpp。

QRect QPainter::window () const

返回窗口矩形。

请参考setWindow()和setViewXForm()。

constQWMatrix& QPainter::worldMatrix () const

返回世界变换矩阵。

请参考setWorldMatrix()。

QPoint QPainter::xForm ( constQPoint&pv ) const

返回从模式坐标中的点pv到系统坐标的变换。

请参考xFormDev()和QWMatrix::map()。

QRect QPainter::xForm ( constQRect&rv ) const

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

返回从模式坐标中的矩形rv到系统坐标的变换。

如果世界变换生效并且已经指定旋转或者裁剪,那么边界矩形被返回。

请参考xFormDev()和QWMatrix::map()。

QPointArray QPainter::xForm ( constQPointArray&av ) const

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

返回从模式坐标中的点的数组av到系统坐标的变换。

请参考xFormDev()和QWMatrix::map()。

QPointArray QPainter::xForm ( constQPointArray&av, intindex, intnpoints ) const

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

返回从模式坐标中的点的数组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()。

QRect QPainter::xFormDev ( constQRect&rd ) const

返回从系统坐标中的矩形rd到模式坐标的变换。

如果世界变换生效并且已经指定旋转或者裁剪,那么边界矩形被返回。

请参考xForm()和QWMatrix::map()。

QPoint QPainter::xFormDev ( constQPoint&pd ) const

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

返回从系统坐标中的点pd到模式坐标的变换。

请参考xForm()和QWMatrix::map()。

QPointArray QPainter::xFormDev ( constQPointArray&ad ) const

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

返回从系统坐标中的点的数组ad到模式坐标的变换。

请参考xForm()和QWMatrix::map()。

QPointArray QPainter::xFormDev ( constQPointArray&ad, intindex, intnpoints ) const

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

返回从系统坐标中的点的数组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()。


相关函数

void qDrawPlainRect ( QPainter*p, intx, inty, intw, inth, constQColor&c, intlineWidth, constQBrush*fill )

#include <qdrawutil.h>

使用绘图工具p绘制由(xywh)指定的简单矩形。

颜色参数c指定了线的颜色。

lineWidth参数指定了线宽。

只要fill不为0,矩形内部就被*fill画刷填充。

如果你想使用一个QFrame窗口部件替代,你可以把它显示为一个简单矩形,例如QFrame::setFrameStyle( QFrame::Box | QFrame::Plain )

警告:这个函数不会考虑QWidget::style()或者QApplication::style()。在QStyle中使用这个绘制函数可以使窗口部件遵循当前图形用户界面风格。

请参考qDrawShadeRect()和QStyle::drawPrimitive()。

void qDrawShadeLine ( QPainter*p, intx1, inty1, intx2, inty2, constQColorGroup&g, boolsunken, intlineWidth, intmidLineWidth )

#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()。

void qDrawShadePanel ( QPainter*p, intx, inty, intw, inth, constQColorGroup&g, boolsunken, intlineWidth, constQBrush*fill )

#include <qdrawutil.h>

使用绘图工具p绘制由(xywh)指定的阴影面板。

颜色组参数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()。

void qDrawShadeRect ( QPainter*p, intx, inty, intw, inth, constQColorGroup&g, boolsunken, intlineWidth, intmidLineWidth, constQBrush*fill )

#include <qdrawutil.h>

使用绘图工具p绘制由(xywh)指定的阴影矩形。

颜色组参数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()。

void qDrawWinButton ( QPainter*p, intx, inty, intw, inth, constQColorGroup&g, boolsunken, constQBrush*fill )

#include <qdrawutil.h>

使用绘图工具p绘制由(xywh)指定的Windows风格的按钮。

颜色组参数g指定了阴影色(light、dark和middle色)。

如果sunken为真,按钮看起来下陷,或者如果sunken为假,按钮看起来上凸。

线宽为2像素。

只要fill不为0,按钮内部就被*fill画刷填充。

警告:这个函数不会考虑QWidget::style()或者QApplication::style()。在QStyle中使用这个绘制函数可以使窗口部件遵循当前图形用户界面风格。

请参考qDrawWinPanel()和QStyle::drawControl()。

void qDrawWinPanel ( QPainter*p, intx, inty, intw, inth, constQColorGroup&g, boolsunken, constQBrush*fill )

#include <qdrawutil.h>

使用绘图工具p绘制由(xywh)指定的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()。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文