Qt Remote Object(QtRO)实现进程间通信——遥控小车(二)

还是先看看运行效果:
在这里插入图片描述
这次我们再Rep文件中使用枚举

class CommonInterface
{
   
    ENUM CarOperation {
   
        Accelerate,
        Decelerate,
        TurnLeft,
        TurnRight
    }
    SIGNAL(sigMessage(CarOperation operation))   //server下发消息给client
}

如果你用的Qt版本是5.9的话,这里可能会有问题,我用的是Qt5…14.1,这样写没有问题。
Qt5.9的朋友遇到问题不要紧张,看这里:QtRO rep中定义枚举类型要避免的坑

这次我们直接放代码:
1.客户端(小车)
car.h

#ifndef CAR_H
#define CAR_H

#include <QGraphicsObject>
#include <QBrush>

#include <QRemoteObjectNode>
#include "rep_CommonInterface_replica.h"

class Car : public QGraphicsObject
{
   
    Q_OBJECT
public:
    Car();
    QRectF boundingRect() const;

public Q_SLOTS:
    void accelerate();
    void decelerate();
    void turnLeft();
    void turnRight();

    void onSigMessage(CommonInterfaceReplica::CarOperation operation);

Q_SIGNALS:
    void crashed();

protected:
    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
    void timerEvent(QTimerEvent *event);

private:
    void init();

private:
    QBrush color;
    qreal wheelsAngle; // used when applying rotation
    qreal speed; // delta movement along the body axis

    QRemoteObjectNode * m_pRemoteNode = nullptr;
    std::shared_ptr<CommonInterfaceReplica> m_pInterface = nullptr;
};

#endif // CAR_H

car.cpp

#include "car.h"
#include <QtWidgets/QtWidgets>
#include <qmath.h>

QRectF Car::boundingRect() const
{
   
    return QRectF(-35, -81, 70, 115);
}

Car::Car() : color(Qt::green), wheelsAngle(0), speed(0)
{
   
    startTimer(1000 / 33);
    setFlag(QGraphicsItem::ItemIsMovable, true);
    setFlag(QGraphicsItem::ItemIsFocusable, true);

    init();
}

void Car::accelerate()
{
   
    if (speed < 10)
        ++speed;
}

void Car::decelerate()
{
   
    if (speed > -10)
        --speed;
}

void Car::turnLeft()
{
   
    <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值