本节对应的视频讲解:B_站_视_频
https://www.bilibili.com/video/BV1YP4y1B7Ex
本节讲解抗锯齿效果
前面实现的效果中,仔细观看能看到明显的锯齿的效果,如下:
此时,可以增加抗锯齿的效果。
1. 关联信号槽
首先,在 widget.cpp
的构造中,为 “抗锯齿” 复选框,关联信号槽
// 抗锯齿
connect(ui->chkAntialiasing, SIGNAL(toggled(bool)), this, SLOT(antialiasChanged()));
2. 声明并实现槽函数
首先,在 widget.h
中声明 antialiasChanged() 槽函数:
class Widget : public QWidget
{
private slots:
void antialiasChanged();
};
然后,在 widget.cpp
中实现这个槽函数:
void Widget::antialiasChanged()
{
ui->paintWidget->setAntialias(ui->chkAntialiasing->isChecked());
}
3. 实现 setAntialias
首先,在 PaintWidget.h
中声明 setAntialias 函数,并定义一个成员变量 mAntialias,如下:
class PaintWidget : public QWidget
{
public slots:
void setAntialias(bool antialias);
private:
bool mAntialias;
};
然后,在 PaintWidget.cpp
中,实现 setAntialias 函数:
void PaintWidget::setAntialias(bool antialias)
{
this->mAntialias = antialias;
update();
}
最后,由于上边调用了 update 之后,系统会自动调用 paintEvent
因此,在 paintEvent 中增加抗锯齿,来完成绘制
void PaintWidget::paintEvent(QPaintEvent *event)
{
// 创建画家类的对象,参数为绘图设备。指定为this,表示在当前窗口绘制
QPainter painter(this);
painter.setPen(mPen);
painter.setBrush(mBrush);
if ( mAntialias ) {
painter.setRenderHint(QPainter::Antialiasing, true);
}
}