Qt::绘制框架-填充图形-选择|删除|增加-type

二维矢量动画智能制作软件开发合集

链接:软件开发技术分享及记录合集

个人开发二维矢量动画智能制作软件界面如下:


目录

填充图形

一、填充图形选择|删除|增加原理

二、填充图形选择实现

1.代码示例

2.示例效果

三、填充图形删除实现

1.代码示例

2.示例效果

四、填充图形增加实现

1.代码示例

2.示例效果

​​​​​​​五、填充图形选择|删除|增加软件测试视频

结束语


填充图形

本篇介绍软件左侧工具栏→填充工具→​​​​填充图形选择 、填充图形删除、和填充增加

填充图形功能参数设计如下:

​​​​​​​


一、填充图形选择|删除|增加原理

本软件中对填充图形定义包括填充及其轮廓,根据设置是否有填充及是否有轮廓,对于填充图形的操作包括选择、删除和增加。

① 填充图形选择实现原理:填充选择采用QGraphicsScene的items()方法,通过QGraphicsItem子对象的type()是否为填充类型判断是否是当前选择对象,当子对象存在堆叠现象时,本软件默认选择最顶层的对象;

② 填充图形删除实现原理:因为删除是删除整个对象,采用QGraphicsScene的removeItem()方法即可,鼠标点选填充图形 若填充有轮廓 则填充和轮廓一起删除,若鼠标点击处存在多个图形堆叠现象,按照图形的z值排序,删除最顶层的图形。另外,该功能需要实现撤销及重做操作,可采用QUndoCommand类;

③ 填充图形增加实现原理:鼠标点选线段,注意本功能要求按照连接顺序依次选择,经过判断线段连续且首尾相接的线段,判断为封闭图形,生成填充图形及其轮廓,经过判断线段连续但未首尾相接,判断为未封闭图形,生成轮廓。

二、填充图形选择实现

1.代码示例

.h文件变量申明:

QPainterPath pathForSelect;

QList<myItem *> FillItems;

void Scene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
    QList<QGraphicsItem *> tmp = items(pathForSelect, Qt::IntersectsItemBoundingRect);
    if(!tmp.isEmpty())
    {
       for(int i = 0; i < tmp.count(); i++)
           if(tmp[i]->type() == myItem::Type)
           {
              a = qgraphicsitem_cast<myItem *>(tmp[i]);
              FillItems.append(a);
           }
    }
}

2.示例效果

填充选择

三、填充图形删除实现

1.代码示例

.h文件变量申明:

class deleteFillCmd :public QUndoCommand

{

public:

         deleteFillCmd(fillItem *fillSeg = nullptr);

         void redo() override;

         void undo() override;

};

deleteFillCmd::deleteFillCmd(fillItem *fillSeg)
{
    m_fillSeg = fillSeg;
    m_parentItem = m_fillSeg->parentItem();
    m_fillPathG = m_fillSeg->m_fillPathG;
    if(m_fillPathG[0]->m_strokeSeg)
        m_strokeParentItem = m_fillPathG[0]->m_strokeSeg->parentItem();
    m_scene = m_fillSeg->scene();
}
/*【删除填充 - redo】*/
void deleteFillCmd::redo()
{
    m_scene->removeItem(m_fillSeg);
    m_fillSeg->hide();
    for(int i = 0; i < m_fillPathG.count(); i++)
        if(m_fillPathG[i]->m_strokeSeg)
        {
            m_scene->removeItem(m_fillPathG[i]->m_strokeSeg);
            m_fillPathG[i]->show();
        }
    m_scene->update();
}
/*【删除填充 - undo】*/
void deleteFillCmd::undo()
{
    m_fillSeg->show();
    m_fillSeg->setParentItem(m_parentItem);
    for(int i = 0; i < m_fillPathG.count(); i++)
        if(m_fillPathG[i]->m_strokeSeg)
            m_fillPathG[i]->m_strokeSeg->setParentItem(m_strokeParentItem);
    m_scene->update();
}

2.示例效果

删除填充

四、填充图形增加实现

1.代码示例

.h文件变量申明:

bool isClose = true; // 是否封闭

QListh<QGraphicsItem *>  fillPath;

for(int i = 0 ; i < fillPath.count()-1 ; i++)
    if(fillPath[i]->m_p2 != fillPath[i+1]->m_p1)
    {
        isClose = false;
        break;
    }

2.示例效果

增加填充

​​​​​​​​​​​​​​五、填充图形选择|删除|增加软件测试视频

填充测试


结束语

本文简要梳理了软件【填充图形选择|删除|增加】的实现框架,内容均为原创。

作者文笔水平一般,请大家多多包涵和指正,十分欢迎进一步交流学习。

若需,请联系本人小红书(小红书号:YzLab96),谢谢​​​​​​​。

链接:  软件开发及测试所有视频合集见小红书​​​​​​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值