123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- #include "WindowAppBlockParallel.h"
- #include "WindowAppItemInterface.h"
- WindowAppBlockParallel::WindowAppBlockParallel(TOOL* pNewTool, POU* Pou, bool bShowOnly, QGraphicsObject* parent /*= nullptr*/)
- : WindowAppBlockStandardBase(pNewTool, Pou, bShowOnly, parent)
- , m_ParallelLineItem(nullptr)
- {
- //// 允许发送尺寸变更通知
- //setFlag(QGraphicsItem::ItemSendsGeometryChanges);
- // 响应鼠标悬停事件(重要,否则QGraphicsItem默认是不响应鼠标悬停事件的)
- this->setAcceptHoverEvents(true);
- // 更新矩形区域的尺寸
- this->updateRect();
- }
- WindowAppBlockParallel::~WindowAppBlockParallel()
- {
- }
- /// <summary>
- /// 添加接口(Parallel工具需要额外添加ToolInterface接口)
- /// </summary>
- void WindowAppBlockParallel::addItemInterfaces()
- {
- // 添加标准接口
- WindowAppBlockStandardBase::addItemInterfaces();
- // 添加Tool接口
- WindowAppBlockStandardBase::addItemToolInterfaces();
- // 2022-8-23,首次添加时需要直接更新并行母线的位置,否则ToolEnd接口会按照默认形式显示
- this->updateParallelLine();
-
- }
- /// <summary>
- /// 更新并行母线的位置
- /// </summary>
- void WindowAppBlockParallel::updateParallelLine()
- {
- if (m_itemInterfaces.size() > 0)
- {
- m_itemInterfaces[PARALL_END_INF_INDX]->updatePostion();
- }
- }
- /// <summary>
- /// 绘制并行控件
- /// </summary>
- /// <param name="painter"></param>
- /// <param name="option"></param>
- /// <param name="widget"></param>
- void WindowAppBlockParallel::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
- {
- // WindowAppBlockStandardBase::paint(painter, option, widget);
- Q_UNUSED(option);
- Q_UNUSED(widget);
- painter->save();
- painter->setRenderHint(QPainter::Antialiasing, true);
- // 绘制边框
- this->drawFrame(painter);
- // 绘制功能块名字
- WindowAppBlockStandardBase::DrawBlockTitle(painter, true);
- // 绘制索引号
- WindowAppBlockStandardBase::DrawIndex(painter);
- painter->restore();
- }
- /// <summary>
- /// 功能块有变动时
- /// </summary>
- /// <param name="change"></param>
- /// <param name="value"></param>
- /// <returns></returns>
- QVariant WindowAppBlockParallel::itemChange(GraphicsItemChange change, const QVariant& value)
- {
- // 首先调用基类的函数
- WindowAppBlockBase::itemChange(change, value);
- // 移动完毕之后,更新并行母线的位置
- if (change == QGraphicsItem::ItemPositionHasChanged && scene())
- {
- this->updateParallelLine();
- }
- return QGraphicsItem::itemChange(change, value);
- }
- /// <summary>
- /// 绘制边框
- /// </summary>
- /// <param name="painter"></param>
- void WindowAppBlockParallel::drawFrame(QPainter* painter)
- {
- // 设置画笔
- if (!this->isSelected())
- {
- painter->setPen(QPen(COLOR_FRAME_PARALLEL, PEN_WIDTH_FRAME));
- }
- else
- {
- painter->setPen(QPen(COLOR_FRAME_PARALLEL, PEN_WIDTH_FRAME_BOLD));
- }
- // 填充
- painter->setBrush(COLOR_TBD_BG);
- // 绘制边框
- painter->drawRoundedRect(blockRect, 0, 0);
- }
- /// <summary>
- /// 更新矩形区域的尺寸
- /// </summary>
- void WindowAppBlockParallel::updateRect()
- {
- // 计算高度
- int blockHeight = PARA_BASIC_HEIGHT;
- // 计算宽度
- int blockWidth = PARA_BASIC_WIDTH;
- // 主体矩形区域
- blockRect.setRect(
- -blockWidth / 2,
- -blockHeight / 2,
- blockWidth,
- blockHeight
- );
- // 序号矩形区域
- blockIndexRect.setRect(
- blockRect.right() - TBD_INDEX_WIDTH,
- blockRect.top() - TBD_INDEX_HEIGHT / 2,
- TBD_INDEX_WIDTH,
- TBD_INDEX_HEIGHT
- );
- // 总体矩形边界
- blockBoundingRect.setRect(
- blockRect.left(),
- blockRect.top() - TBD_INDEX_HEIGHT / 2,
- blockRect.width() + TBD_SHADOW_COUNT * PEN_LINE_WIDTH,
- blockRect.height() + TBD_INDEX_HEIGHT / 2 + TBD_SHADOW_COUNT * PEN_LINE_WIDTH
- );
- }
|