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 *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);
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);
}
}
没看懂你想要干什么