参考 Qt之图形(QPainter的基本绘图)
设置画笔绘制图形
文本直线矩形弧线椭圆 and 圆多边形图片 渐变色
设置显示模式QLinearGradient 线性渐变QRadialGradient 圆形渐变QConicalGradient 圆锥渐变 平移
效果图源码 旋转
效果图源码 缩放
效果图源码 扭曲
效果图源码
设置画笔
QPainter
painter(this);
painter
.setPen(
QColor(0, 160, 230));
painter
.setPen(
QPen(QColor(0, 160, 230), 2));
QFont
font;
font.setFamily("Microsoft YaHei");
font.setPointSize(16);
font.setItalic(true);
font.setBold(true);
font.setUnderline(true);
font.setOverline(true);
font.setCapitalization(QFont
::SmallCaps);
font.setLetterSpacing(QFont
::AbsoluteSpacing, 20);
painter
.setFont(
font);
当字体过长时设置为自动换行
void MainWindow
::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);
QPainter
painter(this);
painter
.setPen(
QColor(0, 160, 230));
QTextOption
option(Qt::AlignLeft | Qt::AlignVCenter);
option.setWrapMode(QTextOption
::WordWrap);
painter
.drawText(
rect(),
QStringLiteral("青春不老,奋斗不止!-纯正开源之美,有趣、好玩、靠谱。。。"),
option);
}
当字体过长时仍用一行表示,末尾显示 …
void MainWindow
::paintEvent(QPaintEvent
*event)
{
Q_UNUSED(event);
QPainter painter(this);
painter
.setPen(QColor(
0,
160,
230));
QFontMetrics fm
= painter
.fontMetrics();
QString strText
= QStringLiteral(
"青春不老,奋斗不止!-纯正开源之美,有趣、好玩、靠谱。。。");
QString strElidedText
= fm
.elidedText(strText, Qt
::ElideRight,
200, Qt
::TextShowMnemonic);
painter
.drawText(rect(), Qt
::AlignCenter, strElidedText);
}
绘制图形
文本
void MainWindow::paintEvent(QPaintEvent *
event)
{
Q_UNUSED(
event);
painter.drawText(rect(), Qt::AlignCenter,
"Qt");
}
直线
painter
.drawLine(
QPointF(0, height()),
QPointF(width() / 2, height() / 2));
矩形
painter
.drawRect(
50,
50,
160,
100)
弧线
void MainWindow::paintEvent(QPaintEvent *
event)
{
Q_UNUSED(
event);
QRectF rect(
90.0,
90.0,
80.0,
90.0);
int startAngle =
30 *
16;
int spanAngle =
120 *
16;
QPainter painter(
this);
painter.setRenderHint(QPainter::Antialiasing,
true);
painter.setPen(QPen(QColor(
0,
160,
230),
2));
painter.drawArc(rect, startAngle, spanAngle);
}
椭圆 and 圆
painter
.drawEllipse(
QPointF(120, 60), 50, 20);
painter
.drawEllipse(
QPointF(120, 140), 40, 40);
多边形
static const QPointF points[
4] = {QPointF(
30,
40), QPointF(
60,
150), QPointF(
150,
160), QPointF(
220,
100)};
painter.drawPolygon(points,
4);
图片
painter
.drawPixmap(
rect(),
QPixmap("./src/Me.png"));
渐变色
设置显示模式
linear
.setSpread(QGradient
::PadSpread);
linear
.setSpread(QGradient
::RepeatSpread);
linear
.setSpread(QGradient
::ReflectSpread);
QLinearGradient 线性渐变
QLinearGradient
linear(QPointF(80, 80), QPointF(150, 150));
linear
.setColorAt(0, Qt
::black);
linear
.setColorAt(1, Qt
::white);
linear
.setSpread(QGradient
::PadSpread);
painter
.setBrush(linear);
QRadialGradient 圆形渐变
QRadialGradient
radial(
110,
110,
50,
130,
130);
radial.setColorAt(
0, Qt::black);
radial.setColorAt(
1, Qt::white);
linear.setSpread(QGradient::PadSpread);
painter.setBrush(
radial);
QConicalGradient 圆锥渐变
QConicalGradient
conical(110, 110, 45);
conical
.setColorAt(0, Qt
::black);
linear
.setSpread(QGradient
::PadSpread);
painter
.setBrush(radial);
平移
效果图
源码
void ReadWrite::paintEvent(QPaintEvent *
event)
{
Q_UNUSED(
event);
QPainter painter(
this);
painter.setRenderHint(QPainter::Antialiasing,
true);
QTransform transform;
transform.translate(m_painterX, m_painterY);
painter.setTransform(transform);
painter.drawPixmap(QRect(
0,
0,
220,
220), QPixmap(
"src/haha.gif"));
}
void ReadWrite::on_btnPower_clicked()
{
m_painterX +=
10;
m_painterY +=
10;
update();
}
旋转
效果图
源码
void ReadWrite
::paintEvent(QPaintEvent
*event)
{
Q_UNUSED(event);
QPainter painter(this);
painter
.setRenderHint(QPainter
::Antialiasing,
true);
QTransform transform;
transform
.rotate(m_painterX, Qt
::XAxis);
painter
.setTransform(transform);
painter
.drawPixmap(QRect(
0,
0,
220,
220), QPixmap(
"src/haha.gif"));
}
void ReadWrite
::on_btnPower_clicked()
{
m_painterX
+= 10;
m_painterY
+= 10;
update();
}
缩放
效果图
源码
void ReadWrite::paintEvent(QPaintEvent *
event)
{
Q_UNUSED(
event);
QPainter painter(
this);
painter.setRenderHint(QPainter::Antialiasing,
true);
QTransform transform;
transform.scale(m_painterX, m_painterY);
painter.setTransform(transform);
painter.drawPixmap(QRect(
0,
0,
220,
220), QPixmap(
"src/haha.gif"));
}
void ReadWrite::on_btnPower_clicked()
{
m_painterX +=
0.2;
m_painterY +=
0.2;
update();
}
扭曲
效果图
源码
void ReadWrite::paintEvent(QPaintEvent *
event)
{
Q_UNUSED(
event);
QPainter painter(
this);
painter.setRenderHint(QPainter::Antialiasing,
true);
QTransform transform;
transform.shear(m_painterX,
0);
painter.setTransform(transform);
painter.drawPixmap(QRect(
0,
15,
220,
220), QPixmap(
"src/haha.gif"));
}
void ReadWrite::on_btnPower_clicked()
{
m_painterX +=
0.2;
m_painterY +=
0.2;
update();
}