📄 qpainter.html
字号:
构造绘制工具。
<p> 注意所有绘制工具的设置(setPen、setBrush等等)在当<a href="#begin">begin</a>()被调用时会被重新设置为默认值。
<p> <p>请参考<a href="#begin">begin</a>()和<a href="#end">end</a>()。
<h3 class=fn><a name="QPainter-2"></a>QPainter::QPainter ( const <a href="qpaintdevice.html">QPaintDevice</a> * pd, bool unclipped = FALSE )
</h3>
构造一个立即开始在绘制设备<em>pd</em>绘制的绘制工具。如果<em>unclipped</em>为真,依赖于底层图形系统,绘制工具将在绘制设备的子对象上绘制。
<p> 这个构造函数对短期的绘制工具是很方便的,例如,在一个<a href="qwidget.html#paintEvent">绘制事件</a>中并且也该被立即使用。构造函数为你调用<a href="#begin">begin</a>()并且QPainter的析构函数会自动调用<a href="#end">end</a>()。
<p> 这是使用begin()和end()的实例:
<pre>
void MyWidget::paintEvent( <a href="qpaintevent.html">QPaintEvent</a> * )
{
QPainter p;
p.<a href="#begin">begin</a>( this );
p.<a href="#drawLine">drawLine</a>( ... ); // 绘制代码
p.<a href="#end">end</a>();
}
</pre>
<p> 使用这个构造函数的相同实例:
<pre>
void MyWidget::paintEvent( <a href="qpaintevent.html">QPaintEvent</a> * )
{
QPainter p( this );
p.<a href="#drawLine">drawLine</a>( ... ); // 绘制代码
}
</pre>
<p> <p>请参考<a href="#begin">begin</a>()和<a href="#end">end</a>()。
<h3 class=fn><a name="QPainter-3"></a>QPainter::QPainter ( const <a href="qpaintdevice.html">QPaintDevice</a> * pd, const <a href="qwidget.html">QWidget</a> * copyAttributes, bool unclipped = FALSE )
</h3>
构造一个立即开始在绘制设备<em>pd</em>绘制的绘制工具,默认参数来自于<em>copyAttributes</em>。如果<em>unclipped</em>为真,依赖于底层图形系统,绘制工具将在绘制设备的子对象上绘制(尽管这个不是在所有平台上都被支持)。
<p> <p>请参考<a href="#begin">begin</a>()。
<h3 class=fn><a name="~QPainter"></a>QPainter::~QPainter ()
</h3>
销毁绘制工具。
<h3 class=fn>const <a href="qcolor.html">QColor</a> & <a name="backgroundColor"></a>QPainter::backgroundColor () const
</h3>
<p> 返回当前背景色。
<p> <p>请参考<a href="#setBackgroundColor">setBackgroundColor</a>()和<a href="qcolor.html">QColor</a>。
<h3 class=fn><a href="qt.html#BGMode-enum">BGMode</a> <a name="backgroundMode"></a>QPainter::backgroundMode () const
</h3>
<p> 返回当前背景模式。
<p> <p>请参考<a href="#setBackgroundMode">setBackgroundMode</a>()和<a href="qt.html#BGMode-enum">BGMode</a>。
<h3 class=fn>bool <a name="begin"></a>QPainter::begin ( const <a href="qpaintdevice.html">QPaintDevice</a> * pd, bool unclipped = FALSE )
</h3>
开始在绘制设备<em>pd</em>上绘制并且如果成功返回真,否则返回假。如果<em>unclipped</em>为真,绘制在绘制设备的边缘将不会被裁剪(尽管这不是在所有平台上被支持)。
<p> 发生的错误是严重的问题,例如这些:
<p> <pre>
p->begin( 0 ); // 不可能——绘制设备不能为0
<a href="qpixmap.html">QPixmap</a> pm( 0, 0 );
p->begin( pm ); // 不可能——pm.<a href="qpixmap.html#isNull">isNull</a>();
p->begin( myWidget );
p2->begin( myWidget ); // 不可能——在同一时间只能有一个绘制工具
</pre>
<p> 注意绝大部分时间,你可以使用一个构造函数来代替<a href="#begin">begin</a>(),并且<a href="#end">end</a>()会在析构函数中被自动完成。
<p> <b>警告:</b>在同一时间绘制设备上只能有一个绘制工具。
<p> <p>请参考<a href="#end">end</a>()和<a href="#flush">flush</a>()。
<p>实例:<a href="aclock-example.html#x1201">aclock/aclock.cpp</a>、<a href="simple-application-example.html#x1525">application/application.cpp</a>、<a href="desktop-example.html#x1771">desktop/desktop.cpp</a>、<a href="hello-example.html#x1599">hello/hello.cpp</a>、<a href="picture-example.html#x79">picture/picture.cpp</a>、<a href="tutorial1-10.html#x2335">t10/cannon.cpp</a>和<a href="xform-example.html#x1432">xform/xform.cpp</a>。
<h3 class=fn>bool <a name="begin-2"></a>QPainter::begin ( const <a href="qpaintdevice.html">QPaintDevice</a> * pd, const <a href="qwidget.html">QWidget</a> * copyAttributes, bool unclipped = FALSE )
</h3>
这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。
<p> 这个版本在绘制设备<em>pd</em>上打开绘制工具并且从<em>copyAttributes</em>设置初始画笔、背景颜色和字体,当<em>unclipped</em>为真,在绘制设备的子对象上进行绘制。这等于:
<p> <pre>
QPainter p;
p.<a href="#begin">begin</a>( pd );
p.<a href="#setPen">setPen</a>( copyAttributes->foregroundColor() );
p.<a href="#setBackgroundColor">setBackgroundColor</a>( copyAttributes->backgroundColor() );
p.<a href="#setFont">setFont</a>( copyAttributes->font() );
</pre>
<p> 这个开始函数便于双重缓冲。当你在一个像素映射上绘制,而不是直接在窗口部件上绘制(稍后用bitBlt把这个像素映射放到窗口部件中),你将需要设置窗口部件的字体等等。这个函数正确地做到了这些。
<p> 实例:
<pre>
void MyWidget::paintEvent( <a href="qpaintevent.html">QPaintEvent</a> * )
{
<a href="qpixmap.html">QPixmap</a> pm(size());
QPainter p;
p.<a href="#begin">begin</a>(&pm, this);
// ……绘制操作可能有闪烁……
p.<a href="#end">end</a>();
<a href="qpaintdevice.html#bitBlt-2">bitBlt</a>(this, 0, 0, &pm);
}
</pre>
<p> <p>请参考<a href="#end">end</a>()。
<h3 class=fn><a href="qrect.html">QRect</a> <a name="boundingRect"></a>QPainter::boundingRect ( int x, int y, int w, int h, int flags, const <a href="qstring.html">QString</a> &, int len = -1, QTextParag ** intern = 0 )
</h3>
<p> 返回相对应的<a href="#drawText">drawText</a>()函数所要打印的对齐的文本的边界矩形,如果<em>len</em>>-1,使用字符串的<em>len</em>个字符,或者如果<em>len</em>为-1,使用整个字符串。绘制已经相应的边界矩形,由点<em>(x, y)</em>以及宽<em>w</em>和高<em>h</em>来约束。
<p> <em>flags</em>参数是下列标记的位或运算结果:
<center><table cellpadding="4" cellspacing="2" border="0">
<tr bgcolor="#a2c511"> <th valign="top">标记 <th valign="top">意义
<tr bgcolor="#f0f0f0"> <td valign="top"><a href="qt.html#AlignmentFlags-enum">AlignAuto</a> <td valign="top">根据语言对齐,通常是左。
<tr bgcolor="#d0d0d0"> <td valign="top"><a href="qt.html#AlignmentFlags-enum">AlignLeft</a> <td valign="top">左对齐。
<tr bgcolor="#f0f0f0"> <td valign="top"><a href="qt.html#AlignmentFlags-enum">AlignRight</a> <td valign="top">右对齐。
<tr bgcolor="#d0d0d0"> <td valign="top"><a href="qt.html#AlignmentFlags-enum">AlignHCenter</a> <td valign="top">水平中间对齐。
<tr bgcolor="#f0f0f0"> <td valign="top"><a href="qt.html#AlignmentFlags-enum">AlignTop</a> <td valign="top">上对齐。
<tr bgcolor="#d0d0d0"> <td valign="top"><a href="qt.html#AlignmentFlags-enum">AlignBottom</a> <td valign="top">下对齐。
<tr bgcolor="#f0f0f0"> <td valign="top"><a href="qt.html#AlignmentFlags-enum">AlignVCenter</a> <td valign="top">垂直中间对齐。
<tr bgcolor="#d0d0d0"> <td valign="top"><a href="qt.html#AlignmentFlags-enum">AlignCenter</a> <td valign="top">(==<a href="qt.html#AlignmentFlags-enum">AlignHCenter</a> | <a href="qt.html#AlignmentFlags-enum">AlignVCenter</a>)。
<tr bgcolor="#f0f0f0"> <td valign="top"><a href="qt.html#TextFlags-enum">SingleLine</a> <td valign="top">在文本中忽略换行符。
<tr bgcolor="#d0d0d0"> <td valign="top"><a href="qt.html#TextFlags-enum">ExpandTabs</a> <td valign="top">扩展tab。
<tr bgcolor="#f0f0f0"> <td valign="top"><a href="qt.html#TextFlags-enum">ShowPrefix</a> <td valign="top">把“&x”解释为“<u>x</u>”。
<tr bgcolor="#d0d0d0"> <td valign="top"><a href="qt.html#TextFlags-enum">WordBreak</a> <td valign="top">打断文本来适应矩形。
</table></center>
<p> 水平对齐默认为<a href="qt.html#AlignmentFlags-enum">AlignLeft</a>并且垂直对齐默认为<a href="qt.html#AlignmentFlags-enum">AlignTop</a>。
<p> 如果几种同一方向上(水平或垂直)的对齐标记一起使用,对齐结果是不确定的。
<p> <em>intern</em>参数不应该被使用。
<p> <p>请参考<a href="qt.html#TextFlags-enum">Qt::TextFlags</a>。
<h3 class=fn><a href="qrect.html">QRect</a> <a name="boundingRect-2"></a>QPainter::boundingRect ( const <a href="qrect.html">QRect</a> & r, int flags, const <a href="qstring.html">QString</a> & str, int len = -1, QTextParag ** internal = 0 )
</h3>
这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。
<p> 返回相对应的<a href="#drawText">drawText</a>()函数所要打印的对齐的文本的边界矩形,如果<em>len</em>>-1,使用字符串的<em>len</em>个字符,或者如果<em>len</em>为-1,使用整个字符串。绘制已经相应的边界矩形,由矩形<em>r</em>来约束。
<p> <em>intern</em>参数不应该被使用。
<p> <p>请参考<a href="#drawText">drawText</a>()、<a href="#fontMetrics">fontMetrics</a>()、<a href="qfontmetrics.html#boundingRect">QFontMetrics::boundingRect</a>()和<a href="qt.html#TextFlags-enum">Qt::TextFlags</a>。
<h3 class=fn>const <a href="qbrush.html">QBrush</a> & <a name="brush"></a>QPainter::brush () const
</h3>
<p> 返回绘制工具的当前画刷。
<p> <p>请参考<a href="#setBrush">QPainter::setBrush</a>()。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -