[学习][笔记] qt5 从入门到入坟:<九>反走样,渐变

简介: [学习][笔记] qt5 从入门到入坟:<九>反走样,渐变

反走样

Qt 学习之路 2(26):反走样

反走样是图形学中的重要概念,用以防止通常所说的“锯齿”现象的出现。

void paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.setPen(QPen(Qt::black, 5, Qt::DashDotLine, Qt::RoundCap));//色 5 像素宽的画笔,使用了点线的样式,圆形笔帽
    painter.setBrush(Qt::yellow);//黄色的画刷填充
    painter.drawEllipse(50, 150, 200, 150);
    painter.setRenderHint(QPainter::Antialiasing, true);//Antialiasing属性(也就是反走样)设置为 true
    painter.setPen(QPen(Qt::black, 5, Qt::DashDotLine, Qt::RoundCap));
    painter.setBrush(Qt::yellow);
    painter.drawEllipse(300, 150, 200, 150);
}

左侧没有使用反锯齿,明细显示出锯齿的样子;右侧则增加了反锯齿代码。

Antialiasing属性:setRenderHint(QPainter::Antialiasing, true);

渐变

Qt 学习之路 2(27):渐变

线性渐变(QLinearGradient)、辐射渐变(QRadialGradient)和角度渐变(QConicalGradient)

线性渐变(QLinearGradient)

void paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing, true);
    QLinearGradient linearGradient(60, 50, 200, 200);
    linearGradient.setColorAt(0.2, Qt::white);
    linearGradient.setColorAt(0.6, Qt::green);
    linearGradient.setColorAt(1.0, Qt::black);
    painter.setBrush(QBrush(linearGradient));
    painter.drawEllipse(50, 50, 200, 150);
}
void QGradient::setColorAt ( qreal position, const QColor & color )

这个函数的作用是,把 position 位置的颜色设置成 color。其中,position 是一个 [0, 1] 闭区间的数字。也就是说,position 是相对于我们建立渐变对象时做的那个起始点和终止点区间的一个比例。以这个线性渐变为例,在从 (60, 50) 到 (200, 200) 的线段上,在 0.2,也就五分之一处设置成白色,在 0.6 也就是五分之三处设置成绿色,在 1.0 也就是终点处设置成黑色。

辐射渐变(QRadialGradient)

角度渐变(QConicalGradient)

void PaintedWidget::paintEvent(QPaintEvent *) 
  {
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    const int r = 200;
    QConicalGradient conicalGradient(0, 0, 0);
    conicalGradient.setColorAt(0.0, Qt::red);
    conicalGradient.setColorAt(60.0/360.0, Qt::yellow);
    conicalGradient.setColorAt(120.0/360.0, Qt::green);
    conicalGradient.setColorAt(180.0/360.0, Qt::cyan);
    conicalGradient.setColorAt(240.0/360.0, Qt::blue);
    conicalGradient.setColorAt(300.0/360.0, Qt::magenta);
    conicalGradient.setColorAt(1.0, Qt::red);
    painter.translate(r, r);//set O point position is (r,r)
    QBrush brush(conicalGradient);
    painter.setPen(Qt::NoPen);
    painter.setBrush(brush);
    painter.drawEllipse(QPoint(0, 0), r, r);
}

QPainter::translate(x, y)函数意思是,将坐标系的原点设置到 (x, y) 点。原本坐标系原点位于左上角,我们使用translate(r, r),将坐标原点设置为 (r, r)。这么一来,左上角的点的坐标就应该是 (-r, -r)。

总结

相关文章
|
2月前
|
数据挖掘 C++
QT基础入门——项目案例(七)
QT基础入门——项目案例(七)
97 0
QT基础入门——项目案例(七)
|
2月前
|
API
QT基础入门——Qt事件(五)
QT基础入门——Qt事件(五)
54 0
QT基础入门——Qt事件(五)
|
2月前
|
Unix Java Linux
QT基础入门——认识与创建QT(一)
QT基础入门——认识与创建QT(一)
62 0
QT基础入门——认识与创建QT(一)
|
1月前
|
Linux 编译器 API
探索Qt图像处理的奥秘:从入门到精通
探索Qt图像处理的奥秘:从入门到精通
81 2
|
2月前
|
编解码
QT基础入门——文件操作(六)
QT基础入门——文件操作(六)
27 0
QT基础入门——文件操作(六)
|
2月前
|
容器
QT基础入门——界面布局和常用控件(四)
QT基础入门——界面布局和常用控件(四)
38 0
QT基础入门——界面布局和常用控件(四)
|
2月前
|
存储
QT基础入门——QMainWindow与对话框QDialog(三)
QT基础入门——QMainWindow与对话框QDialog(三)
54 0
QT基础入门——QMainWindow与对话框QDialog(三)
|
2月前
QT基础入门——信号和槽机制(二)
QT基础入门——信号和槽机制(二)
69 0
QT基础入门——信号和槽机制(二)
|
4月前
|
Ubuntu 数据库 C++
百度搜索:蓝易云【【嵌入式Qt开发入门】在Ubuntu下编写C++教程。】
请注意,这只是一个入门教程,Qt开发涉及到更广泛的主题和概念,例如信号与槽机制、界面设计、数据库操作等。建议参考Qt官方文档和教程,以深入了解和掌握嵌入式Qt开发。
144 0
|
4月前
QT入门基础(二)
QT入门基础(二)

推荐镜像

更多