在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中是否可以做到这一点,但想询问是否有人遇到过此问题,并且是否可以解决。