2017-12-04 9 views
1

この画像のように矩形と楕円形を描くにはどうすればよいですか。このコードでは、矩形と楕円形を1行の境界線で作成しています。QGraphicsItemボーダースタイル

Widget::Widget(QWidget *parent) : 
    QWidget(parent), 
    ui(new Ui::Widget) 
{ 
    ui->setupUi(this); 
    scene = new QGraphicsScene(this); 
    ui->graphicsView->setScene(scene); 

    QBrush redBrush(Qt::red); 
    QBrush blueBrush(Qt::blue); 
    QPen blackPen(Qt::black); 
    blackPen.setWidth(6); 

    //rect = scene->addRect(25,25,Qt::RelativeSize); 
    elipse = scene->addEllipse(20,20,100,100,blackPen,redBrush); 
    elipse->setFlag(QGraphicsItem::ItemIsMovable, true); 
    rect = scene->addRect(-20,-10,200,100,blackPen,blueBrush); 
    rect->setFlag(QGraphicsItem::ItemIsMovable, true); 
    rect->setFlag(QGraphicsItem::ItemIsSelectable,true); 
} 

Expected Result image

答えて

1

これらのプロパティは、私たちがしなければならないことは、当社のカスタムQGraphicsItemを作成している、Qtが提供するQGraphicsItemを持っていません。

dgraphicsitem.hその後、

#ifndef DGRAPHICSITEM_H 
#define DGRAPHICSITEM_H 

#include <QGraphicsRectItem> 
#include <QPainter> 

class DGraphicsEllipseItem : public QGraphicsEllipseItem 
{ 
public: 
    DGraphicsEllipseItem(const QRectF &rect, qreal radius, QGraphicsItem *parent = nullptr): 
     QGraphicsEllipseItem(rect, parent){ 
     mRadius = radius; 
    } 
    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget){ 
     QGraphicsEllipseItem::paint(painter, option, widget); 
     painter->setBrush(brush()); 
     QRectF r = rect(); 
     r.setSize(r.size()-mRadius*QSizeF(1, 1)); 
     r.translate(mRadius*QPointF(1, 1)/2); 
     painter->drawEllipse(r); 
    } 
private: 
    qreal mRadius; 
}; 

class DGraphicsRectItem : public QGraphicsRectItem 
{ 
public: 
    DGraphicsRectItem(const QRectF &rect, qreal radius, QGraphicsItem *parent = nullptr): 
     QGraphicsRectItem(rect, parent){ 
     mRadius = radius; 
    } 
    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget){ 
     QGraphicsRectItem::paint(painter, option, widget); 
     painter->setBrush(brush()); 
     QRectF r = rect(); 
     r.setSize(r.size()-mRadius*QSizeF(1, 1)); 
     r.translate(mRadius*QPointF(1, 1)/2); 
     painter->drawRect(r); 
    } 
private: 
    qreal mRadius; 
}; 
#endif // DGRAPHICSITEM_H 

それがシーンに追加されます:

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

QBrush brush(Qt::white); 
QPen pen(Qt::green); 
pen.setWidth(1); 

DGraphicsEllipseItem* ellipse = new DGraphicsEllipseItem(QRectF(20,20, 200,100), 10); 
scene->addItem(ellipse); 
ellipse->setPen(pen); 
ellipse->setBrush(brush); 
ellipse->setFlag(QGraphicsItem::ItemIsMovable, true); 

DGraphicsRectItem* rect = new DGraphicsRectItem(QRectF(-20,-10,200,100), 10); 
scene->addItem(rect); 
rect->setPen(pen); 
rect->setBrush(brush); 
rect->setFlag(QGraphicsItem::ItemIsMovable, true); 

出力:

enter image description here

オプションが標準装備されていたクラスを継承することです

com例:linkで見つけることができます。

+0

本当に素晴らしい!!!ありがとうございました – Learner

+0

あなたは私にこの問題の解決策を教えていただけます https://stackoverflow.com/questions/47728237/how-can-i-change-qgraphicsview-background-using-check-box/ – Learner

関連する問題