我有两节课。为简单起见,我将其称为A类和B类。我希望在调用类setXPos()
的函数setYPos()
或A
时使用Qt Signals and Slots进行链接类B
,在特定位置显示图像,以便图像cna移动到正确的坐标。这是我的代码:
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
对象中,我想要捕获类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
内的呼叫没有匹配功能的错误。
答案 0 :(得分:4)
我相信这应该有效:
QObject::connect(classA.get(), SIGNAL(posChanged(int, int)), this, SLOT(posChanged(int, int)));
但是,在Qt中使用std :: shared_ptr来获取所有权并不是&#34;正常&#34;在Qt中的方式,可能会在以后引起问题。如果你需要一个对象来拥有&#34;另外,最好使用Qt&#39; parenting mechanism
答案 1 :(得分:2)
您不能在连接中使用参数,只能使用类型。所以接下来尝试:
QObject::connect(classA.get(), SIGNAL(posChanged(int, int)), this, SLOT(posChanged(int, int)));