QUdpSocket не отправляет коллизию датаграммы клиенту - PullRequest
0 голосов
/ 01 марта 2019

После моего предыдущего поста Я обнаружил, что следующая модификация должна быть частью возможного решения connect(item, &MyItem::collided, this, &Widget::on_boxCollision);, и код должен иметь такую ​​возможную реализацию:

виджет.h

public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();
private slots:
    void on_sendBtn_clicked();
    void on_pushButton_clicked();
public slots:
   void on_boxCollision(int x, int y); // <-- Added
#endif // WIDGET_H

widget.cpp

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    // operations
    int itemCount = 1;
    for(int i = 0; i < itemCount; i++) {
        MyItem *item = new MyItem();
        scene->addItem(item);
        connect(item, &MyItem::collided, this, &Widget::on_boxCollision); // <-- Added connection 
    }
}

void Widget::on_boxCollision(int x, int y) // <-- Added new 
{
    auto datagram = QString("%1, %2").arg(x).arg(y).toLatin1();
    mSocket->writeDatagram(datagram, QHostAddress::Broadcast,ui->spinBox->value());
}

и что на myitem.h следует добавить следующее:

signals:
    void collided(int x, int y); // <-- Added
private:
    void doCollision();
};
#endif // MYITEM_H

и, наконец, myitem.cpp

void MyItem::doCollision()
{
    // operations
    }
    // see if the new position is in bounds
    QPointF newPoint = mapToParent(-(boundingRect().width()), -(boundingRect().width() + 2));
    if(!scene()->sceneRect().contains((newPoint))){
        newPoint = mapToParent(0, 0); // move it back in bounds
    }else{
        setPos(newPoint); // set new position
    }
    collided((int)newPoint.x(), (int)newPoint.y()); // <-- Added
}

Однако клиент по-прежнему не может получить информацию о координатах столкновения движущегося квадрата сГраницы QGraphicsScene и квадрат с препятствием.Я думаю, что connect(item, &MyItem::collided, this, &Widget::on_boxCollision); может быть правильным, но это не так, и я не уверен в этом.

То, что я до сих пор пробовал в дополнение к тому, что я уже пробовал ранее здесь:

Я смотрел этот урок , чтобы убедиться, что я иду в правильном направлении, а также я смотрел этот другой источник .Они очень короткие, но я подумал, что это может решить мою проблему, но пока не повезло.Просто чтобы вычеркнуть возможные сомнения, я включил это QT += core gui network в файл .pro как в клиенте, так и в сервере.

Это также ссылка из официальной документации QT, котораяобъясняет, как должно происходить соединение.

В данный момент я не уверен, что это можно сделать в Qt, но хотел спросить, сталкивался ли кто-нибудь с этой проблемой и разрешима ли она.

...