После моего предыдущего поста Я обнаружил, что следующая модификация должна быть частью возможного решения 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, но хотел спросить, сталкивался ли кто-нибудь с этой проблемой и разрешима ли она.