Qt(ビットマップではなく真の線)で線を描くときに簡単な消去機能を実現しようとしています。描画線/消去部分(Qt/C++)
1つの「レイヤー」に黒い線を、別の「レイヤー」に読み取り線を描画します。それから私は赤い線のいくつかを消したいので、私は白い線を描く。しかし、交差している部分の黒い線の一部を見たいと思っています。
これが私の状況です:
私はこのような何かを達成したい:私は、Aから継承customlineクラスの作成で遊んでてきた
を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);
}
線を描くのではなく、塗りつぶされていない矩形を描画します。 –