首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QGraphicsItem边框样式

QGraphicsItem边框样式
EN

Stack Overflow用户
提问于 2017-12-04 22:23:38
回答 1查看 2.6K关注 0票数 1

如何绘制矩形形状和椭圆形形状,像这个image.In,这个代码,创建矩形形状和椭圆形形状与单行border.But,我需要改变那里的边框样式,像这个给定的图像。

代码语言:javascript
复制
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);
}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-04 23:52:56

这些属性没有Qt提供的QGraphicsItem,我们必须做的是创建自定义QGraphicsItem。一个选项是从标准类继承:

dgraphicsitem.h

代码语言:javascript
复制
#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

然后添加到场景中:

代码语言:javascript
复制
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);

输出:

完整的示例可以在下面的链接中找到。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47642978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档