Qt QGraphicsItemごとに個別にアンチエイリアスをかける

QGraphiceViewではsetRenderHint関数でQPainter::Antialiasingを設定してやることで
以下のようにアンチエイリアスのオン オフを切り替えられます。

アンチエイリアス オン
f:id:nukesaq88:20130321191848p:plain

アンチエイリアス オフ
f:id:nukesaq88:20130321191845p:plain

このようにアンチエイリアスの設定を切り替えられますが、
この設定はQGraphicsView全体に適用されてしまいます。

もしQGraphicsItemごとに個別にアンチエイリアスをかけたい場合は
QGraphicsItemを継承したclassでpaint関数を以下のようにオーバーライドすることで
個別のItemにアンチエイリアスをかけることができます。
例はQGraphicsEllipseItemを継承した場合です。

virtual void MyEllipseItem::paint( QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget )
{
  painter->setRenderHints( painter->renderHints() | QPainter::Antialiasing );
  QGraphicsEllipseItem::paint( painter, option, widget );
}

結果: 赤色のItemだけアンチエイリアス オン
f:id:nukesaq88:20130321191855p:plain


参考
QGraphicsView: per-item antialiasing specification?