2014-11-23 2 views
0

У меня есть два класса. Для простоты я буду называть их классом 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.

ответ

2

Вы не можете использовать аргументы в connect, только типы. Так что попробуйте следующий:

QObject::connect(classA.get(), SIGNAL(posChanged(int, int)), this, SLOT(posChanged(int, int))); 
+0

Действительно ли это работает? Не возвращает объект, возвращаемый классом.get(), если shared_ptr не считает ссылку на этот объект? – Soccertrash

4

Я считаю, что это должно работать:

QObject::connect(classA.get(), SIGNAL(posChanged(int, int)), this, SLOT(posChanged(int, int))); 

Однако, используя зЬй :: shared_ptr для владения в Qt не является «нормальным» способом в Qt, и, вероятно, вызовет проблемы позже. Если вам нужен один объект для «собственного» другого, лучше использовать Qt parenting mechanism

Смежные вопросы