QT之GUI學習筆記(二十)---反走樣
阿新 • • 發佈:2019-01-10
反走樣是圖形學中的重要概念,用以防止“鋸齒”現象的出現。很多系統包括Qt的繪圖API裡面都會內建了反走樣演算法,預設是關閉的。
一 程式碼
- paintedwidget.cpp中paintEvent函式修改如下
void PaintedWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setPen(QPen(Qt::black, 5, Qt::DashDotLine, Qt::RoundCap));
painter.setBrush(Qt::yellow );
painter.drawEllipse(50, 150, 200, 150);
painter.setRenderHint(QPainter::Antialiasing, true);
painter.setPen(QPen(Qt::black, 5, Qt::DashDotLine, Qt::RoundCap));
painter.setBrush(Qt::yellow);
painter.drawEllipse(300, 150, 200, 150);
}
2.執行結果
第一個為沒有設定反走樣的圖形;
第二個為設定反走樣的圖形;
兩個可以看出有明顯的區別
二 程式碼解析
1.Qpen
painter.setPen(QPen(Qt::black, 5, Qt::DashDotLine, Qt::RoundCap));
(1)Qpen的建構函式如下:
QPen::QPen(const QColor &color)
QPen::QPen(const QColor &color)
QPen::QPen(const QBrush &brush, qreal width, Qt::PenStyle style = Qt::SolidLine, Qt::PenCapStyle cap = Qt::SquareCap , Qt::PenJoinStyle join = Qt::BevelJoin)
在這段程式碼中
QPen(Qt::black, 5, Qt::DashDotLine, Qt::RoundCap)
使用的是第三個建構函式
(2)setPen()函式
void QPainter::setPen(const QPen &pen)
void QPainter::setPen(const QColor &color)
void QPainter::setPen(Qt::PenStyle style)
上面的程式碼片段使用的是第一個函式。
3.
painter.setRenderHint(QPainter::Antialiasing, true);
這段程式碼意思:Antialiasing功能開啟
即 反走樣功能開啟
由於QPainter是一個狀態機,因而以後的狀態都為防走樣狀態。
4.預設不開啟反走樣的原因
(1)反走樣是一種比較複雜的演算法,在一些對影象質量要求不高的應用中,是不需要進行反走樣的。為了提高效率,一般的圖形繪製系統,如Java2D、OpenGL之類都是預設不進行反走樣的。
(2)在一些必須精確操作畫素的應用中,也是不能進行反走樣的