QUdpSocket没有向客户端发送冲突数据报

时间:2019-03-01 17:08:24

标签: c++ qt c++11 qt5 qudpsocket

my previous post之后,我发现以下修改应成为可能的解决方案connect(item, &MyItem::collided, this, &Widget::on_boxCollision);的一部分,并且代码应具有以下可能的实现:

widget.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);可能是正确的,但可能不正确,我不确定。

到目前为止我尝试过的事情除了已经尝试过的previously here

我观看了this tutorial,以确保我朝着正确的方向前进,同时我也在看this other source。它们是简短的教程,但我认为可以解决我的问题,但到目前为止还没有运气。为了避免您可能有的疑问,我将此QT += core gui network包括在Client和Server的.pro文件中。

这也是 来自Link的官方QT文档,该文档解释了如何进行连接。

目前我不确定在Qt​​中是否可以做到这一点,但想询问是否有人遇到过此问题,并且是否可以解决。

0 个答案:

没有答案