繁体   English   中英

Qt将信号连接到插槽

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM