Qt::Painter 详解
QPainter類參考
QPainter類低水平的繪制,例如在窗口部件上。 詳情請見……
#include <qpainter.h>
繼承了Qt。
被QDirectPainter繼承。
所有成員函數的列表。
公有成員
- enum CoordinateMode { CoordDevice, CoordPainter }
- QPainter ()
- QPainter ( const?QPaintDevice?*?pd, bool?unclipped = FALSE )
- QPainter ( const?QPaintDevice?*?pd, const?QWidget?*?copyAttributes, bool?unclipped = FALSE )
- ~QPainter ()
- 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()在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 ( 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 ); // 不可能——繪制設備不能為0QPixmap 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 ( 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.cpp和themes/wood.cpp。
const?QPoint?& QPainter::brushOrigin () const
返回畫刷原點的當前設置。
請參考setBrushOrigin()。
QRegion QPainter::clipRegion ( CoordinateMode?m = 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 ( int?x, int?y, int?w, int?h, int?a, int?alen )
繪制由矩形 (x, y, w, h)確定的弧,開始角度為 a,并且弧長為 alen。角度a和alen是1/16度,也就是說一個完整的圓等于5760(16*360)。正數的a和alen意味著逆時針方向并且負值意味著順時針方向。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()填充。
角度a和alen是1/16度,也就是說一個完整的圓等于5760(16*360)。正數的a和alen意味著逆時針方向并且負值意味著順時針方向。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.cpp、picture/picture.cpp和tictac/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 )
在( x, y)點繪制從( sx, sy)開始, sw、 sh分別為寬高的像素區域,如果圖片需要被轉換為像素映射,使用 conversionFlags。 conversionFlags的默認值為0,關于其它值有什么作用請參考convertFromImage()。如果device()是QPixmap或QWidget,這個函數可以把image轉換為像素映射然后再繪制它;如果device()是QPrinter或QPicture,它會直接繪制它。
當在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 )
繪制從( 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 ( 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 )
在( x, y)重放圖片 pic。當這個函數被調用時,如果(x, y) = (0, 0),它就和QPicture::play()一樣了。
實例:picture/picture.cpp和xform/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()填充。
角度a和alen是1/16度,也就是說一個完整的圓等于5760(16*360)。正數的a和alen意味著逆時針方向并且負值意味著順時針方向。0度在3點的時鐘位置。
請參考drawArc()和drawChord()。
實例:drawdemo/drawdemo.cpp、grapher/grapher.cpp、t10/cannon.cpp和t9/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.cpp、picture/picture.cpp、qdir/qdir.cpp、qtimage/qtimage.cpp、showimg/showimg.cpp、t10/cannon.cpp和xform/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.cpp和drawlines/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.cpp和picture/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.cpp和themes/metal.cpp。
void QPainter::drawRect ( int?x, int?y, int?w, int?h )
繪制左上角在 (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 ( 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的圓角矩形。xRnd和yRnd參數指定了角有多圓。0構成了直角,99是最圓。
寬和高包括所有的繪制的線。
請參考drawRect()和QPen。
實例:drawdemo/drawdemo.cpp和themes/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.cpp、drawdemo/drawdemo.cpp、grapher/grapher.cpp、picture/picture.cpp、progress/progress.cpp、t8/cannon.cpp和trivial/trivial.cpp。
void QPainter::drawText ( int?x, int?y, const?QString?&, int?len = -1, TextDirection?dir = Auto )
這是一個重載成員函數,提供了方便。它的行為基本上和上面的函數相同。在位置(x, y)繪制給定文本。如果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 )
這是一個重載成員函數,提供了方便。它的行為基本上和上面的函數相同。在從(x, y)開始,寬為w,高為h的矩形中繪制給定文本。如果len為-1,整個字符串被繪制。否則只是繪制開始的len個字符。文本的標記由flags參數中的Qt::AlignmentFlags和Qt::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::AlignmentFlags和Qt::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)指定了繪制設備的左上角,寬和高由w和h給定。(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 )
繪制一個左上角在( x, y)并且寬為 w、高為 h的窗口焦點矩形,使用的畫筆顏色和 bgColor形成反差。這個函數繪制點畫矩形(XOR不被使用)用來指出鍵盤焦點(當QApplication::style()是WindowStyle的時候)。
用來繪制矩形的畫筆顏色不是黑色就是白色,依賴于bgColor的顏色(請參考QColor::gray())。
警告:如果坐標系統已經被旋轉或者修剪,這個函數什么也不繪制。
請參考drawRect()和QApplication::style()。
void QPainter::drawWinFocusRect ( int?x, int?y, int?w, int?h )
這是一個重載成員函數,提供了方便。它的行為基本上和上面的函數相同。繪制一個左上角在(x, y)并且寬為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.cpp、application/application.cpp、desktop/desktop.cpp、hello/hello.cpp、picture/picture.cpp、t10/cannon.cpp和xform/xform.cpp。
void QPainter::eraseRect ( int?x, int?y, int?w, int?h )
擦除x、y、w、h中的區域。等價于fillRect( x, y, w, h, backgroundColor() )。
實例:listboxcombo/listboxcombo.cpp和showimg/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.cpp、progress/progress.cpp、qdir/qdir.cpp、qfd/fontdisplayer.cpp、themes/metal.cpp和themes/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.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 ( int?x, int?y )
繪制從當前畫筆位置到 (x, y)的線并且設置 (x, y)為新的當前畫筆位置。
請參考QPen、moveTo()、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.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 ( double?a )
逆時針方向旋轉坐標系統 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 ( 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.cpp、drawdemo/drawdemo.cpp、picture/picture.cpp、t10/cannon.cpp、t9/cannon.cpp、themes/wood.cpp和tooltip/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 )
設置裁剪區域為矩形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。
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.cpp和themes/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.cpp、drawdemo/drawdemo.cpp、grapher/grapher.cpp、hello/hello.cpp、picture/picture.cpp、t13/cannon.cpp和xform/xform.cpp。
void QPainter::setPen ( const?QPen?&?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 ( 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 )
設置繪圖工具的視口矩形視轉換并且使視轉換生效。視口矩形是視轉換的一部分。視口指定了設備坐標系統并且被x、y、w寬和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 )
設置繪圖工具的窗口矩形視轉換并且使視轉換生效。窗口矩形是視轉換的一部分。窗口指定了邏輯坐標系統并且被x、y、w寬和h高參數指定。它的姐妹viewport()指定了設備坐標系統。
默認窗口矩形和設備矩形一樣。關于坐標轉換的概述請參考坐標系統概述。
請參考window()、setViewport()、setViewXForm()、setWorldMatrix()和setWorldXForm()。
實例:aclock/aclock.cpp和drawdemo/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的矩陣。)
在視變換(也就是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 ( 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.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()。
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() == 4b = 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() == 3b = 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繪制由(x、y、w、h)指定的簡單矩形。
顏色參數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指定了陰影色(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, int?x, int?y, int?w, int?h, const?QColorGroup?&?g, bool?sunken, int?lineWidth, const?QBrush?*?fill )
#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()。
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繪制由(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()。
void qDrawWinButton ( QPainter?*?p, int?x, int?y, int?w, int?h, const?QColorGroup?&?g, bool?sunken, const?QBrush?*?fill )
#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()。
void qDrawWinPanel ( QPainter?*?p, int?x, int?y, int?w, int?h, const?QColorGroup?&?g, bool?sunken, const?QBrush?*?fill )
#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版 |
總結
以上是生活随笔為你收集整理的Qt::Painter 详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在Ubuntu18.04下 安装MPV视
- 下一篇: HDU 4939 DP