У меня есть два класса. Для простоты я буду называть их классом A и классом B. Я хочу использовать Qt Signals and Slots для ссылки, когда функции setXPos()
или setYPos()
класса A
вызываются в класс B
, который отображает изображение в определенном положении так, что изображение cna перемещается к правильным координатам. Вот мой код:Qt Подключение сигнала к слотам
class A: public QObject
{
Q_OBJECT
public:
A();
void setXPos(int newPos) {xPos = newPos; emit posChanged(xPos, yPos);};
void setYPos(int newPos) {yPos = newPos; emit posChanged(xPos, yPos);};
signals:
void posChanged(int x, int y);
private:
int xPos;
int yPos;
};
class B : public QObject
{
Q_OBJECT
public:
B(std::shared_ptr<A> classA);
void changePos(int x, int y);
public slots:
void posChanged(int x, int y);
private:
QPixmap image;
std::shared_ptr<A> classA;
};
Так что в моем B
объекта я хочу, чтобы поймать Emit в posChanged()
в классе A
. Вы можете увидеть в конструкторе B
указатель на A
, который хранится в классе B
. Поэтому в конструкторе я хочу сделать:
B::B(std::shared_ptr<A> classA) : classA(classA)
{
QObject::connect(classA, SIGNAL(posChanged(int x, int y)), *this, SLOT(posChanged(int x, int y)));
}
Но это дает ошибку, что не существует никакой функции соответствия моего звонка внутри моя connect
.
Действительно ли это работает? Не возвращает объект, возвращаемый классом.get(), если shared_ptr не считает ссылку на этот объект? – Soccertrash