RobotItem::RobotItem(const QString &robotImageFileName, model::RobotModel &robotModel) : RotateItem() , mImage(QImage(robotImageFileName)) , mBeepItem(new BeepItem) , mRectangleImpl() , mRobotModel(robotModel) { connect(&mRobotModel, &model::RobotModel::robotRided, this, &RobotItem::ride); connect(&mRobotModel, &model::RobotModel::positionChanged, this, &RobotItem::setPos); connect(&mRobotModel, &model::RobotModel::rotationChanged, this, &RobotItem::setRotation); connect(&mRobotModel, &model::RobotModel::playingSoundChanged, this, &RobotItem::setNeededBeep); connect(&mRobotModel.configuration(), &model::SensorsConfiguration::deviceRemoved, this, &RobotItem::removeSensor); connect(&mRobotModel.configuration(), &model::SensorsConfiguration::positionChanged , this, &RobotItem::updateSensorPosition); connect(&mRobotModel.configuration(), &model::SensorsConfiguration::rotationChanged , this, &RobotItem::updateSensorRotation); setAcceptHoverEvents(true); setAcceptDrops(true); setCursor(QCursor(Qt::PointingHandCursor)); setZValue(1); setX2(x1() + robotWidth); setY2(y1() + robotHeight); mMarkerPoint = QPointF(0, y2() / 2); // Marker is situated behind the robot QPen pen(this->pen()); pen.setWidth(defaultTraceWidth); setPen(pen); setTransformOriginPoint(rotatePoint); mBeepItem->setParentItem(this); mBeepItem->setPos((robotWidth - beepWavesSize) / 2, (robotHeight - beepWavesSize) / 2); mBeepItem->setVisible(false); RotateItem::init(); QHash<kitBase::robotModel::PortInfo, kitBase::robotModel::DeviceInfo> sensors = robotModel.info().specialDevices(); for (const kitBase::robotModel::PortInfo &port : sensors.keys()) { const kitBase::robotModel::DeviceInfo device = sensors[port]; SensorItem *sensorItem = new SensorItem(robotModel.configuration(), port , robotModel.info().sensorImagePath(device), robotModel.info().sensorImageRect(device)); addSensor(port, sensorItem); const QPair<QPoint, qreal> configuration(robotModel.info().specialDeviceConfiguration(port)); QPoint position(configuration.first.x() * boundingRect().width() / 2 , configuration.first.y() * boundingRect().height() / 2); sensorItem->setPos(position + boundingRect().center()); sensorItem->setRotation(configuration.second); } }
void SensorWidget::drawChannels() { if(m_pGraphicsScene) { m_pGraphicsScene->clear(); for(qint32 i = 0; i < m_pSensorModel->rowCount(); ++i) { QString dispChName = m_pSensorModel->data(i, 0).toString(); QString fullChName = m_pSensorModel->data(i, 1).toString(); QPointF loc = m_pSensorModel->data(i, 2).toPointF(); qint32 chNum = m_pSensorModel->getNameIdMap()[fullChName]; SensorItem *item = new SensorItem(dispChName, chNum, loc, QSizeF(28, 16)); item->setSelected(m_pSensorModel->data(i, 3).toBool()); item->setPos(loc); connect(item, &SensorItem::itemChanged, m_pSensorModel, &SensorModel::updateChannelState); m_pGraphicsScene->addItem(item); } } }