QPainter類

QPainter類參考

QPainter類低水平的繪製,例如在窗口部件上。 詳情請見……

#include <qpainter.h>

繼承了Qt

QDirectPainter繼承。

所有成員函數的列表。

公有成員

  • enum CoordinateMode { CoordDevice, CoordPainter }
  • QPainter ( const QPaintDevice * pd, bool unclipped = FALSE )
  • QPainter ( const QPaintDevice * pd, const QWidget * copyAttributes, bool unclipped = FALSE )
  • bool begin ( const QPaintDevice * pd, bool unclipped = FALSE )
  • bool begin ( const QPaintDevice * pd, const QWidget * copyAttributes, bool unclipped = FALSE )
  • bool end ()
  • QPaintDevice * device () const
  • QGfx * internalGfx ()
  • bool isActive () const
  • void flush ( const QRegion & region, CoordinateMode cm = CoordDevice )
  • void flush ()
  • void save ()
  • void restore ()
  • QFontMetrics fontMetrics () const
  • QFontInfo fontInfo () const
  • const QFont & font () const
  • void setFont ( const QFont & font )
  • const QPen & pen () const
  • void setPen ( const QPen & pen )
  • void setPen ( PenStyle style )
  • void setPen ( const QColor & color )
  • const QBrush & brush () const
  • void setBrush ( const QBrush & brush )
  • void setBrush ( BrushStyle style )
  • void setBrush ( const QColor & color )
  • QPoint pos () const
  • const QColor & backgroundColor () const
  • void setBackgroundColor ( const QColor & c )
  • BGMode backgroundMode () const
  • void setBackgroundMode ( BGMode m )
  • RasterOp rasterOp () const
  • void setRasterOp ( RasterOp r )
  • const QPoint & brushOrigin () const
  • void setBrushOrigin ( int x, int y )
  • void setBrushOrigin ( const QPoint & p )
  • bool hasViewXForm () const
  • bool hasWorldXForm () const
  • void setViewXForm ( bool enable )
  • QRect window () const
  • void setWindow ( const QRect & r )
  • void setWindow ( int x, int y, int w, int h )
  • QRect viewport () const
  • void setViewport ( const QRect & r )
  • void setViewport ( int x, int y, int w, int h )
  • void setWorldXForm ( bool enable )
  • const QWMatrix & worldMatrix () const
  • void setWorldMatrix ( const QWMatrix & m, bool combine = FALSE )
  • void saveWorldMatrix ()  (obsolete)
  • void restoreWorldMatrix ()  (obsolete)
  • void scale ( double sx, double sy )
  • void shear ( double sh, double sv )
  • void rotate ( double a )
  • void translate ( double dx, double dy )
  • void resetXForm ()
  • QPoint xForm ( const QPoint & pv ) const
  • QRect xForm ( const QRect & rv ) const
  • QPointArray xForm ( const QPointArray & av ) const
  • QPointArray xForm ( const QPointArray & av, int index, int npoints ) const
  • QPoint xFormDev ( const QPoint & pd ) const
  • QRect xFormDev ( const QRect & rd ) const
  • QPointArray xFormDev ( const QPointArray & ad ) const
  • QPointArray xFormDev ( const QPointArray & ad, int index, int npoints ) const
  • void setClipping ( bool enable )
  • bool hasClipping () const
  • QRegion clipRegion ( CoordinateMode m = CoordDevice ) const
  • void setClipRect ( const QRect & r, CoordinateMode m = CoordDevice )
  • void setClipRect ( int x, int y, int w, int h, CoordinateMode m = CoordDevice )
  • void setClipRegion ( const QRegion & rgn, CoordinateMode m = CoordDevice )
  • void drawPoint ( int x, int y )
  • void drawPoint ( const QPoint & p )
  • void drawPoints ( const QPointArray & a, int index = 0, int npoints = -1 )
  • void moveTo ( int x, int y )
  • void moveTo ( const QPoint & p )
  • void lineTo ( int x, int y )
  • void lineTo ( const QPoint & p )
  • void drawLine ( int x1, int y1, int x2, int y2 )
  • void drawLine ( const QPoint & p1, const QPoint & p2 )
  • void drawRect ( int x, int y, int w, int h )
  • void drawRect ( const QRect & r )
  • void drawWinFocusRect ( int x, int y, int w, int h )
  • void drawWinFocusRect ( int x, int y, int w, int h, const QColor & bgColor )
  • void drawWinFocusRect ( const QRect & r )
  • void drawWinFocusRect ( const QRect & r, const QColor & bgColor )
  • void drawRoundRect ( int x, int y, int w, int h, int xRnd = 25, int yRnd = 25 )
  • void drawRoundRect ( const QRect & r, int xRnd = 25, int yRnd = 25 )
  • void drawEllipse ( int x, int y, int w, int h )
  • void drawEllipse ( const QRect & r )
  • void drawArc ( int x, int y, int w, int h, int a, int alen )
  • void drawArc ( const QRect & r, int a, int alen )
  • void drawPie ( int x, int y, int w, int h, int a, int alen )
  • void drawPie ( const QRect & r, int a, int alen )
  • void drawChord ( int x, int y, int w, int h, int a, int alen )
  • void drawChord ( const QRect & r, int a, int alen )
  • void drawLineSegments ( const QPointArray & a, int index = 0, int nlines = -1 )
  • void drawPolyline ( const QPointArray & a, int index = 0, int npoints = -1 )
  • void drawPolygon ( const QPointArray & a, bool winding = FALSE, int index = 0, int npoints = -1 )
  • void drawConvexPolygon ( const QPointArray & pa, int index = 0, int npoints = -1 )
  • void drawCubicBezier ( const QPointArray & a, int index = 0 )
  • void drawPixmap ( int x, int y, const QPixmap & pixmap, int sx = 0, int sy = 0, int sw = -1, int sh = -1 )
  • void drawPixmap ( const QPoint & p, const QPixmap & pm, const QRect & sr )
  • void drawPixmap ( const QPoint & p, const QPixmap & pm )
  • void drawPixmap ( const QRect & r, const QPixmap & pm )
  • void drawImage ( int x, int y, const QImage & image, int sx = 0, int sy = 0, int sw = -1, int sh = -1, int conversionFlags = 0 )
  • void drawImage ( const QPoint &, const QImage &, const QRect & sr, int conversionFlags = 0 )
  • void drawImage ( const QPoint & p, const QImage & i, int conversion_flags = 0 )
  • void drawImage ( const QRect & r, const QImage & i )
  • void drawTiledPixmap ( int x, int y, int w, int h, const QPixmap & pixmap, int sx = 0, int sy = 0 )
  • void drawTiledPixmap ( const QRect & r, const QPixmap & pm, const QPoint & sp )
  • void drawTiledPixmap ( const QRect & r, const QPixmap & pm )
  • void drawPicture ( const QPicture & pic )  (obsolete)
  • void drawPicture ( int x, int y, const QPicture & pic )
  • void drawPicture ( const QPoint & p, const QPicture & pic )
  • void fillRect ( int x, int y, int w, int h, const QBrush & brush )
  • void fillRect ( const QRect & r, const QBrush & brush )
  • void eraseRect ( int x, int y, int w, int h )
  • void eraseRect ( const QRect & r )
  • enum TextDirection { Auto, RTL, LTR }
  • void drawText ( int x, int y, const QString &, int len = -1, TextDirection dir = Auto )
  • void drawText ( const QPoint &, const QString &, int len = -1, TextDirection dir = Auto )
  • void drawText ( int x, int y, const QString &, int pos, int len, TextDirection dir = Auto )
  • void drawText ( const QPoint & p, const QString &, int pos, int len, TextDirection dir = Auto )
  • void drawText ( int x, int y, int w, int h, int flags, const QString &, int len = -1, QRect * br = 0, QTextParag ** internal = 0 )
  • void drawText ( const QRect & r, int tf, const QString & str, int len = -1, QRect * brect = 0, QTextParag ** internal = 0 )
  • QRect boundingRect ( int x, int y, int w, int h, int flags, const QString &, int len = -1, QTextParag ** intern = 0 )
  • QRect boundingRect ( const QRect & r, int flags, const QString & str, int len = -1, QTextParag ** internal = 0 )
  • int tabStops () const
  • void setTabStops ( int ts )
  • int * tabArray () const
  • void setTabArray ( int * ta )
  • HDC handle () const

靜態公有成員

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

相關函數

  • void qDrawShadeLine ( QPainter * p, int x1, int y1, int x2, int y2, const QColorGroup & g, bool sunken, int lineWidth, int midLineWidth )
  • void qDrawShadeRect ( QPainter * p, int x, int y, int w, int h, const QColorGroup & g, bool sunken, int lineWidth, int midLineWidth, const QBrush * fill )
  • void qDrawShadePanel ( QPainter * p, int x, int y, int w, int h, const QColorGroup & g, bool sunken, int lineWidth, const QBrush * fill )
  • void qDrawWinButton ( QPainter * p, int x, int y, int w, int h, const QColorGroup & g, bool sunken, const QBrush * fill )
  • void qDrawWinPanel ( QPainter * p, int x, int y, int w, int h, const QColorGroup & g, bool sunken, const QBrush * fill )
  • void qDrawPlainRect ( QPainter * p, int x, int y, int w, int h, const QColor & c, int lineWidth, const QBrush * 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()在QPrinterQPicture上更快並且有時更好。

使用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時,一些平臺的行爲可能就不正確了。

請參考QPaintDeviceQWidgetQPixmapQPrinterQPicture應用程序預演座標系統概述圖像類圖像處理類


成員類型文檔

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 ( const QPaintDevice * pd, bool unclipped = 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 ( const QPaintDevice * pd, const QWidget * copyAttributes, bool unclipped = FALSE )

構造一個立即開始在繪製設備pd繪製的繪製工具,默認參數來自於copyAttributes。如果unclipped爲真,依賴於底層圖形系統,繪製工具將在繪製設備的子對象上繪製(儘管這個不是在所有平臺上都被支持)。

請參考begin()。

QPainter::~QPainter ()

銷燬繪製工具。

const QColor & QPainter::backgroundColor () const

返回當前背景色。

請參考setBackgroundColor()和QColor

BGMode QPainter::backgroundMode () const

返回當前背景模式。

請參考setBackgroundMode()和BGMode

bool QPainter::begin ( const QPaintDevice * pd, bool unclipped = 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.cppapplication/application.cppdesktop/desktop.cpphello/hello.cpppicture/picture.cppt10/cannon.cppxform/xform.cpp

bool QPainter::begin ( const QPaintDevice * pd, const QWidget * copyAttributes, bool unclipped = 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 ( int x, int y, int w, int h, int flags, const QString &, int len = -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 ( const QRect & r, int flags, const QString & str, int len = -1, QTextParag ** internal = 0 )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

返回相對應的drawText()函數所要打印的對齊的文本的邊界矩形,如果len>-1,使用字符串的len個字符,或者如果len爲-1,使用整個字符串。繪製已經相應的邊界矩形,由矩形r來約束。

intern參數不應該被使用。

請參考drawText()、fontMetrics()、QFontMetrics::boundingRect()和Qt::TextFlags

const QBrush & QPainter::brush () const

返回繪製工具的當前畫刷。

請參考QPainter::setBrush()。

實例:themes/metal.cppthemes/wood.cpp

const QPoint & QPainter::brushOrigin () const

返回畫刷原點的當前設置。

請參考setBrushOrigin()。

QRegion QPainter::clipRegion ( CoordinateMode m = CoordDevice ) const

返回當前設置的裁剪區域。注意裁剪區域是在物理設備座標內給定的並且如果mCoordDevice(默認),不服從任何座標變換。如果mCoordPainter,返回的區域是在模型座標中。

請參考setClipRegion()、setClipRect()、setClipping()和QPainter::CoordinateMode

實例: themes/wood.cpp

QPaintDevice * QPainter::device () const

返回繪製工具當前正在繪製的繪製設備,如果繪製工具沒有激活,返回0。

請參考QPaintDevice::paintingActive()。

實例:helpviewer/helpwindow.cpplistboxcombo/listboxcombo.cpp

void QPainter::drawArc ( int x, int y, int w, int h, int a, int alen )

繪製由矩形(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 ( const QRect & r, int a, int alen )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

繪製由矩形r確定的弧,開始角度爲a,並且弧長爲alen

void QPainter::drawChord ( int x, int y, int w, int h, int a, int alen )

繪製由矩形(x, y, w, h)確定的弦,開始角度爲a,並且弧長爲alen

這個弦由當前brush()填充。

角度aalen是1/16度,也就是說一個完整的圓等於5760(16*360)。正數的aalen意味着逆時針方向並且負值意味着順時針方向。0度在3點的時鐘位置。

請參考drawArc()和drawPie()。

void QPainter::drawChord ( const QRect & r, int a, int alen )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

繪製由矩形r確定的弦,開始角度爲a,並且弧長爲alen

void QPainter::drawConvexPolygon ( const QPointArray & pa, int index = 0, int npoints = -1 )

繪製pa中從pa[index]開始(index默認爲0)的npoints個點確定的凸多邊形。

如果提供的多邊形不是凸的,結果是不確定的。

在一些平臺上(例如X窗口),這個比drawPolygon()更快。

實例: aclock/aclock.cpp

void QPainter::drawCubicBezier ( const QPointArray & a, int index = 0 )

繪製a中從a[index]開始(index默認爲0)的控制點確定的三次貝塞爾曲線。

a[index + 3]之後的控制點被忽略。如果沒有足夠的控制點,就什麼也不發生。

void QPainter::drawEllipse ( int x, int y, int w, int h )

繪製中心在(x + w/2, y + h/2)並且大小爲(w, h)的橢圓。

實例:drawdemo/drawdemo.cpppicture/picture.cpptictac/tictac.cpp

void QPainter::drawEllipse ( const QRect & r )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

繪製在r內適合的的橢圓。

void QPainter::drawImage ( int x, int y, const QImage & image, int sx = 0, int sy = 0, int sw = -1, int sh = -1, int conversionFlags = 0 )

在(xy)點繪製從(sxsy)開始,swsh分別爲寬高的像素區域,如果圖片需要被轉換爲像素映射,使用conversionFlagsconversionFlags的默認值爲0,關於其它值有什麼作用請參考convertFromImage()。

如果device()是QPixmapQWidget,這個函數可以把image轉換爲像素映射然後再繪製它;如果device()是QPrinterQPicture,它會直接繪製它。

當在QPrinter上繪製時,圖像中的alpha掩碼將被忽略。

請參考drawPixmap()和QPixmap::convertFromImage()。

實例: canvas/canvas.cpp

void QPainter::drawImage ( const QPoint &, const QImage &, const QRect & sr, int conversionFlags = 0 )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

在給定的點繪製圖像中的矩形sr

void QPainter::drawImage ( const QPoint & p, const QImage & i, int conversion_flags = 0 )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

在點p繪製圖像i

如果圖像需要被修改來適應低分辨率的結果(例如從32位轉換爲8位),使用conversion_flags來指定你希望發生什麼。

請參考Qt::ImageConversionFlags

void QPainter::drawImage ( const QRect & r, const QImage & i )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

在矩形r中繪製圖像i。如果圖像和矩形的大小不同,圖像將被伸縮來適應矩形。

void QPainter::drawLine ( int x1, int y1, int x2, int y2 )

繪製從(x1y1)到(x2y2)的直線並且設置當前畫筆位置爲(x2y2)。

請參考pen()。

實例:aclock/aclock.cppdrawlines/connect.cppprogress/progress.cppsplitter/splitter.cppthemes/metal.cppthemes/wood.cpp

void QPainter::drawLine ( const QPoint & p1, const QPoint & p2 )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

繪製從點p1到點p2的直線。

void QPainter::drawLineSegments ( const QPointArray & a, int index = 0, int nlines = -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 ( int x, int y, const QPicture & pic )

在(xy)重放圖片pic

當這個函數被調用時,如果(xy) = (0, 0),它就和QPicture::play()一樣了。

實例:picture/picture.cppxform/xform.cpp

void QPainter::drawPicture ( const QPicture & pic )

這個函數是廢棄的。它的提供只是爲了保證舊代碼能夠工作。我們強烈建議在新代碼中不要使用它。

使用另外一個(0, 0)位移的QPainter::drawPicture()函數來替代它。

void QPainter::drawPicture ( const QPoint & p, const QPicture & pic )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

在點p繪製圖片pic

void QPainter::drawPie ( int x, int y, int w, int h, int a, int alen )

繪製由矩形(x, y, w, h)確定的餅圖,開始角度爲a,並且弧長爲alen

這個餅圖由當前的brush()填充。

角度aalen是1/16度,也就是說一個完整的圓等於5760(16*360)。正數的aalen意味着逆時針方向並且負值意味着順時針方向。0度在3點的時鐘位置。

請參考drawArc()和drawChord()。

實例:drawdemo/drawdemo.cppgrapher/grapher.cppt10/cannon.cppt9/cannon.cpp

void QPainter::drawPie ( const QRect & r, int a, int alen )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

繪製由矩形r確定的餅圖,開始角度爲a,並且弧長爲alen

void QPainter::drawPixmap ( int x, int y, const QPixmap & pixmap, int sx = 0, int sy = 0, int sw = -1, int sh = -1 )

通過把pixmap的一部分複製到繪製設備中,在(x, y)繪製一個像素映射。

(x, y)指定了要被繪製的繪製設備的左上點。(sx, sy)指定了要被繪製的pixmap中的左上點。默認爲(0, 0)。

(sw, sh)指定了要被繪製的pixmap的大小。默認(-1, -1),意思是一直到像素映射的右下。

當在QPrinter上繪製時,當前像素映射的遮蔽或者它的alpha通道被忽略。

請參考bitBlt()和QPixmap::setMask()。

實例:grapher/grapher.cpppicture/picture.cppqdir/qdir.cppqtimage/qtimage.cppshowimg/showimg.cppt10/cannon.cppxform/xform.cpp

void QPainter::drawPixmap ( const QPoint & p, const QPixmap & pm, const QRect & sr )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

繪製像素映射pm中的矩形sr,原點就放在點p處。

void QPainter::drawPixmap ( const QPoint & p, const QPixmap & pm )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

繪製像素映射pm,原點就放在點p處。

void QPainter::drawPixmap ( const QRect & r, const QPixmap & pm )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

在矩形r中繪製像素映射pm。如果像素映射和矩形大小不同,像素映射被拉伸來適合這個矩形。

void QPainter::drawPoint ( int x, int y )

使用當前畫筆在(x, y)繪製一個單一點。

請參考QPen

實例:desktop/desktop.cppdrawlines/connect.cpp

void QPainter::drawPoint ( const QPoint & p )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

繪製點p

void QPainter::drawPoints ( const QPointArray & a, int index = 0, int npoints = -1 )

使用當前畫筆繪製一組點a

如果index爲非零(默認爲0),只有從index開始的點被繪製。如果npoints爲負數(默認),從index開始剩餘的所有點都被繪製。如果index爲0或者正數,則index個點被繪製。

void QPainter::drawPolygon ( const QPointArray & a, bool winding = FALSE, int index = 0, int npoints = -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.cpppicture/picture.cpp

void QPainter::drawPolyline ( const QPointArray & a, int index = 0, int npoints = -1 )

繪製a中,從a[index]開始(index默認爲0)的npoints個點確定的多邊形。

如果npoints爲-1(默認),直到數組的最後的所有點都被使用(也就是說a.size()-index條線確定的多邊形)。

請參考drawLineSegments()、drawPolygon()和QPen

實例:scribble/scribble.cppthemes/metal.cpp

void QPainter::drawRect ( int x, int y, int w, int h )

繪製左上角在(x, y)並且寬爲w、高爲h的矩形。

請參考QPendrawRoundRect()。

實例:drawdemo/drawdemo.cpppicture/picture.cppt10/cannon.cppt11/cannon.cppt9/cannon.cpptooltip/tooltip.cpptrivial/trivial.cpp

void QPainter::drawRect ( const QRect & r )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

繪製矩形r

void QPainter::drawRoundRect ( int x, int y, int w, int h, int xRnd = 25, int yRnd = 25 )

繪製左上角在(x, y)並且寬爲w、高爲h的圓角矩形。

xRndyRnd參數指定了角有多圓。0構成了直角,99是最圓。

寬和高包括所有的繪製的線。

請參考drawRect()和QPen

實例:drawdemo/drawdemo.cppthemes/wood.cpp

void QPainter::drawRoundRect ( const QRect & r, int xRnd = 25, int yRnd = 25 )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

繪製一個圓角矩形r,在每個角的x位置xRnd、y位置yRnd繪製圓角。

void QPainter::drawText ( const QPoint & p, const QString &, int pos, int len, TextDirection dir = Auto )

在點p從位置pos開始繪製文本那。如果len爲-1,整個字符串被繪製。否則只是繪製開始的len個字符。文本的方向由dir確定。

請參考QPainter::TextDirection

實例:desktop/desktop.cppdrawdemo/drawdemo.cppgrapher/grapher.cpppicture/picture.cppprogress/progress.cppt8/cannon.cpptrivial/trivial.cpp

void QPainter::drawText ( int x, int y, const QString &, int len = -1, TextDirection dir = Auto )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

在位置(xy)繪製給定文本。如果len爲1,整個字符串被繪製。否則只是繪製開始的len個字符。文本的方向由dir確定。

請參考QPainter::TextDirection

void QPainter::drawText ( const QPoint &, const QString &, int len = -1, TextDirection dir = Auto )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

在給定的點繪製文本。

請參考QPainter::TextDirection

void QPainter::drawText ( int x, int y, const QString &, int pos, int len, TextDirection dir = Auto )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

在點(x, y)從位置pos開始繪製文本那。如果len爲-1,整個字符串被繪製。否則只是繪製開始的len個字符。文本的方向由dir確定。

void QPainter::drawText ( int x, int y, int w, int h, int flags, const QString &, int len = -1, QRect * br = 0, QTextParag ** internal = 0 )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

在從(xy)開始,寬爲w,高爲h的矩形中繪製給定文本。如果len爲-1,整個字符串被繪製。否則只是繪製開始的len個字符。文本的標記由flags參數中的Qt::AlignmentFlagsQt::TextFlags或運算的結果給定。br(如果非零)參數只是在內部使用。

void QPainter::drawText ( const QRect & r, int tf, const QString & str, int len = -1, QRect * brect = 0, QTextParag ** internal = 0 )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

在矩形r中從str中繪製最多len個字符。

注意r.y()的意思和兩個drawText()的變體不同。

這個函數繪製格式化的文本。tf文本格式是Qt::AlignmentFlagsQt::TextFlags或運算的結果。

水平對齊方式默認爲AlignAuto並且垂直對齊方式默認爲AlignTop。

brect(如果非零)被設置爲輸出的矩形的實際邊界。internal還是用於內部。

請參考boundingRect()。

void QPainter::drawTiledPixmap ( int x, int y, int w, int h, const QPixmap & pixmap, int sx = 0, int sy = 0 )

在指定的矩形中繪製平鋪的pixmap

(x, y)指定了繪製設備的左上角,寬和高由wh給定。(sx, sy)指定了所要繪製的pixmap的左上角。默認爲(0, 0)。

調用drawTiledPixmap()和在一個區域上使用一個像素映射多次調用drawPixmap()相似,但是根據底下的窗口系統,這個有更多潛在的效率。

請參考drawPixmap()。

void QPainter::drawTiledPixmap ( const QRect & r, const QPixmap & pm, const QPoint & sp )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

在原點在sp的矩形r中繪製平鋪的pm

void QPainter::drawTiledPixmap ( const QRect & r, const QPixmap & pm )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

在矩形r中繪製平鋪的pm

void QPainter::drawWinFocusRect ( int x, int y, int w, int h, const QColor & bgColor )

繪製一個左上角在(xy)並且寬爲w、高爲h的窗口焦點矩形,使用的畫筆顏色和bgColor形成反差。

這個函數繪製點畫矩形(XOR不被使用)用來指出鍵盤焦點(當QApplication::style()是WindowStyle的時候)。

用來繪製矩形的畫筆顏色不是黑色就是白色,依賴於bgColor的顏色(請參考QColor::gray())。

警告:如果座標系統已經被旋轉或者修剪,這個函數什麼也不繪製。

請參考drawRect()和QApplication::style()。

void QPainter::drawWinFocusRect ( int x, int y, int w, int h )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

繪製一個左上角在(xy)並且寬爲w、高爲h的窗口焦點矩形。

這個函數繪製點畫矩形(XOR不被使用)用來指出鍵盤焦點(當QApplication::style()是WindowStyle的時候)。

警告:如果座標系統已經被旋轉或者修剪,這個函數什麼也不繪製。

請參考drawRect()和QApplication::style()。

void QPainter::drawWinFocusRect ( const QRect & r )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

繪製矩形r作爲窗口焦點矩形。

void QPainter::drawWinFocusRect ( const QRect & r, const QColor & 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.cppapplication/application.cppdesktop/desktop.cpphello/hello.cpppicture/picture.cppt10/cannon.cppxform/xform.cpp

void QPainter::eraseRect ( int x, int y, int w, int h )

擦除xywh中的區域。等價於fillRect( x, y, w, h, backgroundColor() )

實例:listboxcombo/listboxcombo.cppshowimg/showimg.cpp

void QPainter::eraseRect ( const QRect & r )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

擦除矩形r中的區域。

void QPainter::fillRect ( int x, int y, int w, int h, const QBrush & brush )

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

你可以指定QColor作爲brush,因爲QBrush的一個構造函數可以得到QColor參數並且創建一個實心模式的畫刷。

請參考drawRect()。

實例:listboxcombo/listboxcombo.cppprogress/progress.cppqdir/qdir.cppqfd/fontdisplayer.cppthemes/metal.cppthemes/wood.cpp

void QPainter::fillRect ( const QRect & r, const QBrush & brush )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

在矩形r中使用brush填充。

void QPainter::flush ( const QRegion & region, CoordinateMode cm = CoordDevice )

使用裁剪模式cm刷新在區域region中的任何緩存的繪製操作。

如果平臺不支持刷新一個指定區域,這個刷新將更新整個設備。

請參考CoordinateMode

void QPainter::flush ()

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

刷新任何緩存的繪製操作。

const QFont & QPainter::font () const

返回當前設置的繪圖工具字體。

請參考setFont()和QFont

實例: fileiconview/qfileiconview.cpp

QFontInfo QPainter::fontInfo () const

如果繪圖工具是激活的,返回繪圖工具的字體信息。它不能獲得未激活的繪圖工具的字體信息,所以如果繪圖工具未激活,返回值是未定義的。

請參考fontMetrics()和isActive()。

QFontMetrics QPainter::fontMetrics () const

如果繪圖工具是激活的,返回繪圖工具的字體規格。它不能獲得未激活的繪圖工具的字體規格,所以如果繪圖工具未激活,返回值是未定義的。

請參考fontInfo()和isActive()。

實例:action/application.cppapplication/application.cppdesktop/desktop.cppdrawdemo/drawdemo.cpphelpviewer/helpwindow.cppmdi/application.cppqwerty/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 ( int x, int y )

繪製從當前畫筆位置到(x, y)的線並且設置(x, y)爲新的當前畫筆位置。

請參考QPenmoveTo()、drawLine()和pos()。

void QPainter::lineTo ( const QPoint & p )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

繪製到典p的線。

void QPainter::moveTo ( int x, int y )

設置當前畫筆位置爲(x, y)

請參考lineTo()和pos()。

void QPainter::moveTo ( const QPoint & p )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

設置當前畫筆位置爲點p

const QPen & QPainter::pen () const

返回繪圖工具的當前畫筆。

請參考setPen()。

實例:progress/progress.cppthemes/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 ( double a )

逆時針方向旋轉座標系統a度。

請參考translate()、scale()、shear()、resetXForm()、setWorldMatrix()和xForm()。

實例:aclock/aclock.cppt10/cannon.cppt9/cannon.cpp

void QPainter::save ()

保存當前繪圖工具狀態(把狀態壓到棧中)。save()必須被一個相對應的restore()跟隨。end()將釋放棧。

請參考restore()。

實例: aclock/aclock.cpp

void QPainter::saveWorldMatrix ()

這個函數是廢棄的。它的提供只是爲了保證舊代碼能夠工作。我們強烈建議在新代碼中不要使用它。

我們建議使用save()來替代它。

void QPainter::scale ( double sx, double sy )

通過(sx, sy)拉伸座標系統。

請參考translate()、shear()、rotate()、resetXForm()、setWorldMatrix()和xForm()。

實例: xform/xform.cpp

void QPainter::setBackgroundColor ( const QColor & c )

設置繪圖工具的背景色爲c

背景色是當繪製不透明文本、點畫線和位圖時填充的顏色。背景色在透明背景模式(這是默認的)下無效。

請參考backgroundColor()、setBackgroundMode()和BackgroundMode

void QPainter::setBackgroundMode ( BGMode m )

設置繪圖工具的背景模式爲m,它必須是TransparentMode(默認)或者OpaqueMode

透明模式繪製不設置背景像素繪製點畫線和文本。不透明模式使用當前背景顏色填充這些空間。

注意爲了繪製透明的位圖和像素映射,你必須使用QPixmap::setMask()。

請參考backgroundMode()和setBackgroundColor()。

實例: picture/picture.cpp

void QPainter::setBrush ( BrushStyle style )

設置繪圖工具的畫刷爲黑色和特定的style

請參考brush()和QBrush

實例:aclock/aclock.cppdrawdemo/drawdemo.cpppicture/picture.cppt10/cannon.cppt9/cannon.cppthemes/wood.cpptooltip/tooltip.cpp

void QPainter::setBrush ( const QBrush & brush )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

設置繪圖工具的畫刷爲brush

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

請參考brush()。

void QPainter::setBrush ( const QColor & color )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

設置繪圖工具的畫刷具有風格SolidPattern和特定的color

請參考brush()和QBrush

void QPainter::setBrushOrigin ( int x, int y )

設置畫刷原點爲(x, y)

畫刷原點指定繪圖工具的畫刷的(0, 0)座標。這個設置只適用於模式畫刷和像素映射畫刷。

請參考brushOrigin()。

void QPainter::setBrushOrigin ( const QPoint & p )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

設置畫刷原點爲點p

void QPainter::setClipRect ( int x, int y, int w, int h, CoordinateMode m = CoordDevice )

設置裁剪區域爲矩形xywh並且使裁剪生效。裁剪模式被設置爲m

注意裁剪區域是在物理設備座標中給定的並且如果m等於CoordDevice(默認),服從任何座標轉換。如果m等於CoordPainter,返回的區域在模型座標中。

請參考setClipRegion()、clipRegion()、setClipping()和QPainter::CoordinateMode

實例:grapher/grapher.cppprogress/progress.cppqtimage/qtimage.cppshowimg/showimg.cppsplitter/splitter.cpptrivial/trivial.cpp

void QPainter::setClipRect ( const QRect & r, CoordinateMode m = CoordDevice )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

設置裁剪區域爲矩形r並且使裁剪生效。裁剪模式被設置爲m

請參考CoordinateMode

void QPainter::setClipRegion ( const QRegion & rgn, CoordinateMode m = CoordDevice )

設置裁剪區域爲rgn並且使裁剪生效。裁剪模式被設置爲m

注意裁剪區域是在物理設備座標中給定的並且服從任何座標轉換

請參考setClipRect()、clipRegion()、setClipping()和CoordinateMode

實例:qfd/fontdisplayer.cppthemes/wood.cpp

void QPainter::setClipping ( bool enable )

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

請參考hasClipping()、setClipRect()和setClipRegion()。

實例: themes/wood.cpp

void QPainter::setFont ( const QFont & font )

設置繪圖工具的字體爲font

這個字體被後面的drawText()函數使用。文本顏色和畫筆顏色相同。

請參考font()和drawText()。

實例:application/application.cppdrawdemo/drawdemo.cppgrapher/grapher.cpphello/hello.cpppicture/picture.cppt13/cannon.cppxform/xform.cpp

void QPainter::setPen ( const QPen & pen )

設置新的繪圖工具畫筆。

pen定義瞭如何繪製線和輪廓,並且它也定義了文本顏色。

請參考pen()。

實例:desktop/desktop.cppdrawdemo/drawdemo.cppprogress/progress.cppt10/cannon.cppt9/cannon.cppthemes/metal.cppthemes/wood.cpp

void QPainter::setPen ( PenStyle style )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

設置繪圖工具畫筆有風格style、寬爲0並且爲黑色。

請參考pen()和QPen

void QPainter::setPen ( const QColor & color )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

設置繪圖工具畫筆有風格SolidLine、寬爲0並且爲特定的color

請參考pen()和QPen

void QPainter::setRasterOp ( RasterOp r )

設置光柵操作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 ( int ts )

設置tab stop寬度爲ts,也就是說在ts、2*ts、3*ts等等定位tab stop。

當繪製設置了ExpandTabs的格式化文本時,tab stop被用到。只有在沒有tab數組被設置(這是默認的情況)的情況下,這個確定的tab stop值被使用。

請參考tabStops()、setTabArray()、drawText()和fontMetrics()。

void QPainter::setViewXForm ( bool enable )

如果enable爲真,使視轉換生效,或者如果enable爲假,使視轉換失效。

請參考hasViewXForm()、setWindow()、setViewport()、setWorldMatrix()、setWorldXForm()和xForm()。

void QPainter::setViewport ( int x, int y, int w, int h )

設置繪圖工具的視口矩形視轉換並且使視轉換生效。

視口矩形是視轉換的一部分。視口指定了設備座標系統並且被xyw寬和h高參數指定。它的姐妹window()指定了邏輯座標系統。

默認視口矩形和設備矩形一樣。關於座標轉換的概述請參考座標系統概述

請參考viewport()、setWindow()、setViewXForm()、setWorldMatrix()、setWorldXForm()和xForm()。

實例: aclock/aclock.cpp

void QPainter::setViewport ( const QRect & r )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

設置繪圖工具的視口爲矩形r

void QPainter::setWindow ( int x, int y, int w, int h )

設置繪圖工具的窗口矩形視轉換並且使視轉換生效。

窗口矩形是視轉換的一部分。窗口指定了邏輯座標系統並且被xyw寬和h高參數指定。它的姐妹viewport()指定了設備座標系統。

默認窗口矩形和設備矩形一樣。關於座標轉換的概述請參考座標系統概述

請參考window()、setViewport()、setViewXForm()、setWorldMatrix()和setWorldXForm()。

實例:aclock/aclock.cppdrawdemo/drawdemo.cpp

void QPainter::setWindow ( const QRect & r )

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

設置繪圖工具的窗口爲矩形r

void QPainter::setWorldMatrix ( const QWMatrix & m, bool combine = FALSE )

設置世界變換矩陣爲m並且使世界變換生效。

如果combine爲真,那麼m與當前變換矩陣組合,否則m替代當前變換矩陣。

如果m是單位矩陣並且combine爲假,這個函數調用setWorldXForm(FALSE)。(單位矩陣是QWMatrix::m11()和QWMatrix::m22()爲1.0並且其它爲0.0的矩陣。)

在視變換(也就是windowviewport)之後世界變換被應用。

下列的函數不使用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.cppxform/xform.cpp

void QPainter::setWorldXForm ( bool enable )

如果enable爲真,使世界變換生效,或者如果enable爲假,使世界變換失效。世界變換矩陣不被改變。

請參考setWorldMatrix()、setWindow()、setViewport()、setViewXForm()和xForm()。

void QPainter::shear ( double sh, double sv )

使用(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 ( double dx, double dy )

使用(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.cppt10/cannon.cppt9/cannon.cppthemes/metal.cppthemes/wood.cppxform/xform.cpp

QRect QPainter::viewport () const

返回視口矩形。

請參考setViewport()和setViewXForm()。

實例: aclock/aclock.cpp

QRect QPainter::window () const

返回窗口矩形。

請參考setWindow()和setViewXForm()。

const QWMatrix & QPainter::worldMatrix () const

返回世界變換矩陣。

請參考setWorldMatrix()。

QPoint QPainter::xForm ( const QPoint & pv ) const

返回從模式座標中的點pv到系統座標的變換。

請參考xFormDev()和QWMatrix::map()。

QRect QPainter::xForm ( const QRect & rv ) const

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

返回從模式座標中的矩形rv到系統座標的變換。

如果世界變換生效並且已經指定旋轉或者裁剪,那麼邊界矩形被返回。

請參考xFormDev()和QWMatrix::map()。

QPointArray QPainter::xForm ( const QPointArray & av ) const

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

返回從模式座標中的點的數組av到系統座標的變換。

請參考xFormDev()和QWMatrix::map()。

QPointArray QPainter::xForm ( const QPointArray & av, int index, int npoints ) 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 ( const QRect & rd ) const

返回從系統座標中的矩形rd到模式座標的變換。

如果世界變換生效並且已經指定旋轉或者裁剪,那麼邊界矩形被返回。

請參考xForm()和QWMatrix::map()。

QPoint QPainter::xFormDev ( const QPoint & pd ) const

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

返回從系統座標中的點pd到模式座標的變換。

請參考xForm()和QWMatrix::map()。

QPointArray QPainter::xFormDev ( const QPointArray & ad ) const

這是一個重載成員函數,提供了方便。它的行爲基本上和上面的函數相同。

返回從系統座標中的點的數組ad到模式座標的變換。

請參考xForm()和QWMatrix::map()。

QPointArray QPainter::xFormDev ( const QPointArray & ad, int index, int npoints ) 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, int x, int y, int w, int h, const QColor & c, int lineWidth, const QBrush * 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, int x1, int y1, int x2, int y2, const QColorGroup & g, bool sunken, int lineWidth, int midLineWidth )

#include <qdrawutil.h>

使用繪圖工具p繪製水平的(y1 == y2)或者垂直的(x1 == x2)陰影線。

如果y1 != y2並且x1 != x2(也就是說這個線既不是水平的也不是垂直的),就什麼也不繪製。

顏色組參數g指定了陰影色(lightdarkmiddle色)。

如果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, int x, int y, int w, int h, const QColorGroup & g, bool sunken, int lineWidth, const QBrush * fill )

#include <qdrawutil.h>

使用繪圖工具p繪製由(xywh)指定的陰影面板。

顏色組參數g指定了陰影色(lightdarkmiddle色)。

如果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, int x, int y, int w, int h, const QColorGroup & g, bool sunken, int lineWidth, int midLineWidth, const QBrush * fill )

#include <qdrawutil.h>

使用繪圖工具p繪製由(xywh)指定的陰影矩形。

顏色組參數g指定了陰影色(lightdarkmiddle色)。

如果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, int x, int y, int w, int h, const QColorGroup & g, bool sunken, const QBrush * fill )

#include <qdrawutil.h>

使用繪圖工具p繪製由(xywh)指定的Windows風格的按鈕。

顏色組參數g指定了陰影色(lightdarkmiddle色)。

如果sunken爲真,按鈕看起來下陷,或者如果sunken爲假,按鈕看起來上凸。

線寬爲2像素。

只要fill不爲0,按鈕內部就被*fill畫刷填充。

警告:這個函數不會考慮QWidget::style()或者QApplication::style()。在QStyle中使用這個繪製函數可以使窗口部件遵循當前圖形用戶界面風格。

請參考qDrawWinPanel()和QStyle::drawControl()。

void qDrawWinPanel ( QPainter * p, int x, int y, int w, int h, const QColorGroup & g, bool sunken, const QBrush * fill )

#include <qdrawutil.h>

使用繪圖工具p繪製由(xywh)指定的Windows風格的面板。

顏色組參數g指定了陰影色(lightdarkmiddle色)。

如果sunken爲真,面板看起來下陷,或者如果sunken爲假,面板看起來上凸。

線寬爲2像素。

只要fill不爲0,面板內部就被*fill畫刷填充。

如果你想使用一個QFrame窗口部件替代,你可以把它顯示爲一個Windows風格的面板,例如QFrame::setFrameStyle( QFrame::WinPanel | QFrame::Raised )

警告:這個函數不會考慮QWidget::style()或者QApplication::style()。在QStyle中使用這個繪製函數可以使窗口部件遵循當前圖形用戶界面風格。

請參考qDrawShadePanel()、qDrawWinButton()和QStyle::drawPrimitive()。



Copyright © 2002 Trolltech Trademarks 譯者:Cavendish
Qt 3.0.5版
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章