2016-11-22 18 views
0

Qt(ビットマップではなく真の線)で線を描くときに簡単な消去機能を実現しようとしています。描画線/消去部分(Qt/C++)

1つの「レイヤー」に黒い線を、別の「レイヤー」に読み取り線を描画します。それから私は赤い線のいくつかを消したいので、私は白い線を描く。しかし、交差している部分の黒い線の一部を見たいと思っています。

これが私の状況です:

enter image description here

私はこのような何かを達成したい:私は、Aから継承customlineクラスの作成で遊んでてきた

enter image description here

をQGraphicsLineを使用し、ペイントイベントを実装してコンポジションモードを制御できるようにしましたが、私はまだ適切なソリューションを見つけていません。

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 

    _scene = new QGraphicsScene(this); 
    ui->graphicsView->setScene(_scene); 

    _blackPen = QPen(Qt::black); 
    _blackPen.setWidth(40); 

    _redPen = QPen(Qt::red);; 
    _redPen.setWidth(40); 

    _eraserPen = QPen(Qt::white); 
    _eraserPen.setWidth(10); 

    _scene->addItem(new CustomLine(0,0,100,100, _blackPen, QPainter::CompositionMode_Source)); 
    _scene->addItem(new CustomLine(0,100,100,100, _redPen, QPainter::CompositionMode_Source)); 
    _scene->addItem(new CustomLine(0,100,100,100, _eraserPen, QPainter::CompositionMode_Source)); 
} 


    #include "customline.h" 
    #include <QPainter> 

    CustomLine::CustomLine(qreal x, qreal y, qreal x2, qreal y2, QPen &pen,  QPainter::CompositionMode mode) 
    { 
    _x = x; 
    _y = y; 
    _x2 = x2; 
    _y2 = y2; 
    _pen = pen; 
    _mode = mode; 
} 

    void CustomLine::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) 
    { 
     painter->setPen(_pen); 
     painter->setCompositionMode(_mode); 
     painter->drawLine(_x,_y, _x2, _y2); 
    } 

+0

線を描くのではなく、塗りつぶされていない矩形を描画します。 –

答えて

1

コンポジットで行う方法があるかもしれませんが、赤い線のアウトラインを試してみて、それを得るにはQPainterPathStrokerを使用してください。行を含むパスを作成し、ストロークを使用してその周囲のアウトラインを作成します。コードは次のようなものになります:

QPainterPath path; 
path.lineTo (...); 
QPainterPathStroker stroker; 
QPainterPath outline = stroker.createStroke (path).simplified()); 
painter.drawPath (outline); 

あなたが望むものを得るには、おそらくこれで遊ぶ必要があります。最初にQPainterPathStrokerを使い始めたとき、私はそれが非常に直感的であるとは思っていませんでした。

+0

アウトラインを描くための解決策ですが、残念ながらそれは私が探しているアウトライン効果ではありません。私は "白い"線を描くことができる方法を探しています。赤い線を消去/隠すようにして、下の黒い線を示します。 –

関連する問題