[英]Qt Connecting Signal to Slots
我有两节课。 为简单起见,我将它们称为A类和B类。当将A
类的setXPos()
或setYPos()
函数调用到在特定对象上显示图像的B
类时,我想使用Qt Signals和Slots进行链接。位置,以便图像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
对象中,我想捕获A
类中posChanged()
的发出。 您可以在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
没有与我的呼叫匹配的功能。
我相信这应该有效:
QObject::connect(classA.get(), SIGNAL(posChanged(int, int)), this, SLOT(posChanged(int, int)));
但是,在Qt中使用std :: shared_ptr拥有所有权不是Qt中的“正常”方式,并且以后可能会引起问题。 如果您需要一个对象“拥有”另一个对象,则最好使用Qt的育儿机制
您不能在连接中使用参数,只能在类型中使用。 因此,请尝试以下:
QObject::connect(classA.get(), SIGNAL(posChanged(int, int)), this, SLOT(posChanged(int, int)));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.