2012-02-03 22 views
3

私が達成しようとしているのは次のとおりです。QGraphicsSceneQGraphicsPixmapItemと表示されています。ピックスマップには複数の色があり、ピックスマップ全体に1つの線を描く必要があります。Qtで多色の線を描く

私の考えは、すべてのピクセルがピックスマップの相対ピクセルの負の(補色の)色を持つ線を描くことです。だから私はQGraphicsItemをサブクラス化し、paint()メソッドを再実装して多色の線を描くことを考えました。

しかし、私はpaint関数からpixmapのピクセル情報をどのように取得できるのかわからないので、私は立ち往生しています。見つかったとしても、私はその行を描画する方法を考えることができませんこちらです。

進め方についてアドバイスをいただけますか?

答えて

11

QPaintercompositionModeプロパティを使用すると、ソースピクセルの色を読み取ることなく、このようなことを非常に簡単に行うことができます。

あなたの項目のpaint方法に適応することができるはずカスタムpaintEvent実装、と簡単なサンプルQWidget

#include <QtGui> 

class W: public QWidget { 
    Q_OBJECT 

    public: 
     W(QWidget *parent = 0): QWidget(parent) {}; 

    protected: 
     void paintEvent(QPaintEvent *) { 
      QPainter p(this); 

      // Draw boring background 
      p.setPen(Qt::NoPen); 
      p.setBrush(QColor(0,255,0)); 
      p.drawRect(0, 0, 30, 90); 
      p.setBrush(QColor(255,0,0)); 
      p.drawRect(30, 0, 30, 90); 
      p.setBrush(QColor(0,0,255)); 
      p.drawRect(60, 0, 30, 90); 

      // This is the important part you'll want to play with 
      p.setCompositionMode(QPainter::RasterOp_SourceAndNotDestination); 
      QPen inverter(Qt::white); 
      inverter.setWidth(10); 
      p.setPen(inverter); 
      p.drawLine(0, 0, 90, 90); 
     } 
}; 

この意志の出力以下の画像のようなもの:

Fat inverted line over funky colors

もう1つの実験では、より興味深い効果を得るためにcomposition modesを試してください。

+0

ありがとうございました。 –