|
|
|
|
#include "FITKAbstractGraphObject.h"
|
|
|
|
|
#include "FITKAbstractGraphWidget.h"
|
|
|
|
|
|
|
|
|
|
namespace Core
|
|
|
|
|
{
|
|
|
|
|
/**
|
|
|
|
|
* @brief 构造函数,初始化图形对象。
|
|
|
|
|
* @param data 指向关联数据对象的指针。
|
|
|
|
|
*/
|
|
|
|
|
FITKAbstractGraphObject::FITKAbstractGraphObject(FITKAbstractDataObject* data)
|
|
|
|
|
:_dataObj(data)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 析构函数,释放资源并发出图形对象销毁信号。
|
|
|
|
|
*/
|
|
|
|
|
FITKAbstractGraphObject::~FITKAbstractGraphObject()
|
|
|
|
|
{
|
|
|
|
|
emit this->graphObjDestroyedSig(this); // 发出图形对象销毁的信号
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 设置关联的数据对象。
|
|
|
|
|
* @param dataobj 指向要设置的数据对象的指针。
|
|
|
|
|
*/
|
|
|
|
|
void FITKAbstractGraphObject::setDataObject(FITKAbstractDataObject* dataobj)
|
|
|
|
|
{
|
|
|
|
|
_dataObj = dataobj;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 设置关联的图形小部件。
|
|
|
|
|
* @param gwidget 指向要设置的图形小部件的指针。
|
|
|
|
|
*/
|
|
|
|
|
void FITKAbstractGraphObject::setGraphWidget(FITKAbstractGraphWidget* gwidget)
|
|
|
|
|
{
|
|
|
|
|
_graphWidget = gwidget;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 获取关联的图形小部件。
|
|
|
|
|
* @return 返回关联的图形小部件的指针。
|
|
|
|
|
*/
|
|
|
|
|
Core::FITKAbstractGraphWidget* FITKAbstractGraphObject::getGraphWidget()
|
|
|
|
|
{
|
|
|
|
|
return _graphWidget;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 获取关联的数据对象。
|
|
|
|
|
* @return 返回关联的数据对象的指针。
|
|
|
|
|
*/
|
|
|
|
|
Core::FITKAbstractDataObject* FITKAbstractGraphObject::getDataOject()
|
|
|
|
|
{
|
|
|
|
|
return _dataObj;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 从图形小部件中移除当前图形对象。
|
|
|
|
|
* 如果当前图形对象没有关联的图形小部件,则不执行任何操作。
|
|
|
|
|
*/
|
|
|
|
|
void FITKAbstractGraphObject::removeFromGraphWidget()
|
|
|
|
|
{
|
|
|
|
|
if (_graphWidget == nullptr) return;
|
|
|
|
|
_graphWidget->removeGraphObj(this);
|
|
|
|
|
_graphWidget = nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void FITKAbstractGraphObject::update(bool mandatory /*= false*/)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 析构函数,清除管理的所有图形对象。
|
|
|
|
|
*/
|
|
|
|
|
FITKGraphObjManager::~FITKGraphObjManager()
|
|
|
|
|
{
|
|
|
|
|
this->clear(); // 清除管理的所有图形对象
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 清除管理的图形对象列表。
|
|
|
|
|
*/
|
|
|
|
|
void FITKGraphObjManager::clear()
|
|
|
|
|
{
|
|
|
|
|
_graphObjList.clear(); // 清除图形对象列表
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* @brief 向图形对象管理器添加一个图形对象。
|
|
|
|
|
* @param gobj 指向要添加的图形对象的指针。
|
|
|
|
|
* 若传入空指针,则不执行任何操作。
|
|
|
|
|
* 添加时建立图形对象销毁信号与管理器的槽函数之间的连接,
|
|
|
|
|
* 以便在图形对象销毁时自动从管理器中移除。
|
|
|
|
|
*/
|
|
|
|
|
void FITKGraphObjManager::appendGraphObj(FITKAbstractGraphObject* gobj)
|
|
|
|
|
{
|
|
|
|
|
if (gobj == nullptr) return;
|
|
|
|
|
_graphObjList.append(gobj);
|
|
|
|
|
connect(gobj, SIGNAL(graphObjDestroyedSig(FITKAbstractGraphObject*)),
|
|
|
|
|
this, SLOT(removeGraphObjSlot(FITKAbstractGraphObject*)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 从图形对象管理器中移除指定图形对象。
|
|
|
|
|
* @param obj 指向要移除的图形对象的指针。
|
|
|
|
|
* 若传入的对象不在管理器中,则不执行任何操作。
|
|
|
|
|
* 移除时断开图形对象销毁信号与管理器槽函数之间的连接。
|
|
|
|
|
*/
|
|
|
|
|
void FITKGraphObjManager::removeGraphObj(FITKAbstractGraphObject* obj)
|
|
|
|
|
{
|
|
|
|
|
if (!_graphObjList.contains(obj)) return;
|
|
|
|
|
_graphObjList.removeOne(obj);
|
|
|
|
|
disconnect(obj, SIGNAL(graphObjDestroyedSig(FITKAbstractGraphObject*)),
|
|
|
|
|
this, SLOT(removeGraphObjSlot(FITKAbstractGraphObject*)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 通过索引从图形对象管理器中移除图形对象。
|
|
|
|
|
* @param index 待移除图形对象的索引位置。
|
|
|
|
|
* 若索引超出有效范围,则按该索引从管理器中移除对应的图形对象。
|
|
|
|
|
*/
|
|
|
|
|
void FITKGraphObjManager::removeGraphObj(const int index)
|
|
|
|
|
{
|
|
|
|
|
if (index < 0 || index >= _graphObjList.size())
|
|
|
|
|
{
|
|
|
|
|
this->removeGraphObj(_graphObjList.at(index));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 判断图形对象管理器是否包含指定图形对象。
|
|
|
|
|
* @param gobj 指向待检查的图形对象的指针。
|
|
|
|
|
* @return 如果管理器包含指定图形对象,返回 true;否则返回 false。
|
|
|
|
|
*/
|
|
|
|
|
bool FITKGraphObjManager::isContains(FITKAbstractGraphObject* gobj)
|
|
|
|
|
{
|
|
|
|
|
return _graphObjList.contains(gobj);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 获取图形对象管理器中的图形对象数量。
|
|
|
|
|
* @return 返回管理器中当前存储的图形对象数量。
|
|
|
|
|
*/
|
|
|
|
|
int FITKGraphObjManager::getGraphObjCount()
|
|
|
|
|
{
|
|
|
|
|
return _graphObjList.size();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 根据索引获取图形对象管理器中存储的图形对象。
|
|
|
|
|
* @param index 待获取图形对象的索引位置。
|
|
|
|
|
* @return 如果索引在有效范围内,返回对应位置的图形对象指针;否则返回 nullptr。
|
|
|
|
|
*/
|
|
|
|
|
FITKAbstractGraphObject* FITKGraphObjManager::getGraphObjAt(const int index)
|
|
|
|
|
{
|
|
|
|
|
if (index < 0 || index >= _graphObjList.size())
|
|
|
|
|
return nullptr;
|
|
|
|
|
return _graphObjList.at(index);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 私有槽函数,用于响应图形对象销毁信号并从管理器中移除相应对象。
|
|
|
|
|
* @param obj 指向被销毁的图形对象的指针。
|
|
|
|
|
*/
|
|
|
|
|
void FITKGraphObjManager::removeGraphObjSlot(FITKAbstractGraphObject* obj)
|
|
|
|
|
{
|
|
|
|
|
this->removeGraphObj(obj);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|