QGraphiceitem 添加阴影后的问题

节点类继承QGraphicsObject
圆点的部分代码

portItem::portItem(portItem::PortTypes type, int posY,int posX, uint num, QColor color, QGraphicsItem *parent) : QGraphicsObject(parent),
m_posY(posY),
m_posX(posX),
m_size(QSize(12,12)),
m_color(color),
m_number(num),
m_ellipseRadius(5),
m_isHovered(false),
m_portPos(mapToScene(QPointF(0,0))),
m_type(type)
{
setAcceptHoverEvents(true);
setFlags(ItemIsSelectable);

}
QRectF portItem::boundingRect() const
{
return QRectF(0, 0, m_size.width(), m_size.height());
}

QPainterPath portItem::shape() const
{
QPainterPath path;
path.addRect(0, 0, m_size.width(), m_size.height());
return path;
}

void portItem::paint(QPainter *p, const QStyleOptionGraphicsItem *item, QWidget *widget)
{
Q_UNUSED(widget);//避免编译报错而已没啥用
Q_UNUSED(item);
//设置抗锯齿
p->setRenderHint(QPainter::Antialiasing);

p->setBrush(QBrush(m_color));

if (m_isHovered)
    p->setPen(QPen(m_color,1));
else p->setPen(QPen(QColor::fromRgb(0,0,0,100),1));

//QPointF portPos = QPointF(m_size.width()/2+40,-m_size.height()+m_ellipseRadius);
QPointF portPos = QPointF(m_size.width()/2+90,-m_ellipseRadius);
p->drawEllipse(portPos,m_ellipseRadius,m_ellipseRadius);
setZValue(4);
calculatePosition();

}

添加QGraphicsDropShadowEffect 后 其他的图元被部分隐藏了
QGraphicsProxyWidget* proxyWidget = new QGraphicsProxyWidget(this);
// 设置阴影边框;
QGraphicsDropShadowEffect *m_pShadowEffect = new QGraphicsDropShadowEffect();

// 阴影偏移
m_pShadowEffect->setOffset(4, 4);
// 阴影颜色;
m_pShadowEffect->setColor(QColor(0,0,0,255));
// 阴影半径;
m_pShadowEffect->setBlurRadius(8);
// 窗口上的所有控件使用当前的阴影效果;
setGraphicsEffect(m_pShadowEffect);

qDebug()<<this->boundingRect()<<this->shape();
proxyWidget->setWidget(widget);
//proxyWidget->setZValue(0);
setZValue(0);
//setFlags(ItemIsSelectable | ItemIsMovable | ItemSendsGeometryChanges | ItemClipsChildrenToShape);
setFlags(ItemIsSelectable | ItemIsMovable | ItemSendsGeometryChanges);
setCacheMode(DeviceCoordinateCache);
setAcceptHoverEvents(true);
结果是这样的

img

尝试过改变他的 boundrect 和 shape 但是没什么用

void MyNode::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) {
Q_UNUSED(widget);

bool isSelected = false;

if (option->state & QStyle::State_Selected)
    isSelected = true;

QPen pen;
pen.setStyle(Qt::DashDotLine);
pen.setWidth(1);
pen.setStyle(Qt::SolidLine);
pen.setCapStyle(Qt::RoundCap);
pen.setJoinStyle(Qt::RoundJoin);
pen.setBrush(QColor::fromRgb(0, 0, 0, 0));

painter->setPen(pen);

painter->setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);




QRadialGradient gradient_0(m_size.height()/2+30,m_size.width()/2-30,m_size.width());

gradient_0.setColorAt(0,QColor("#2C5364"));
gradient_0.setColorAt(0.4,QColor("#203A43"));
gradient_0.setColorAt(0.6,QColor("#0F2027"));

painter->setBrush(gradient_0);
painter->drawRoundedRect(2,1,m_size.width()-4,m_size.height()-2,
                   (qreal)m_size.width()/((qreal)m_size.width()/6),
                   (qreal)m_size.height()/((qreal)m_size.height()/6));

if (isSelected) {
    pen.setWidth(2);
    pen.setBrush(QColor::fromRgb(200, 80, 20, 255));
    setZValue(2);
}
else {
    pen.setWidth(1);
    pen.setBrush(QColor::fromRgb(0, 0, 0, 170));
    setZValue(1);
}

}

想要最终的效果是 顶上的小圆点可以正常点击和显示

没看懂你想要干什么