我怎么把这个信号连接到插槽上呢?

How would I connect this signal to the slot

本文关键字:插槽 连接 信号      更新时间:2023-10-16

我想在我的主类foo中创建一个信号,以便不同类中的静态方法可以发出它。我刚开始使用QT,所以我有点困惑。我目前有以下代码

class Foo : public QMainWindow
{
    Q_OBJECT
public:
    Foo(QWidget *parent = 0, Qt::WFlags flags = 0);
    ~Foo();
signals:
    void UpdateSignal(int val);
private slots:
    void MySlot(int val);
};
Foo::Foo(QWidget *parent, Qt::WFlags flags): QMainWindow(parent, flags)
{
    //How do I connect Bfoo::somemethod() here.  I know its suppose to be like
    connect(xx,SIGNAL(UpdateSignal(int)),this, SLOT(MySlot(int)));
    ui.setupUi(this);
}
void Foo::MySlot(int val)
{
 //Do something..
}
Now I have this class
Class Bfoo
{
   static void somemethod()
   {
       emit UpdateSignal(12);
   }
}

对于静态somemethod()如何释放UpdateSignal有什么建议

当你发出信号时,有必要知道是哪个对象发出的。这是因为信号不是被实现为不同类之间的消息,而是(可能不同)类的实例之间的消息。其次,信号是受保护的方法。外部用户无法访问它们。你能做的是在Foo中定义一个公共方法来做排放:

void Foo:EmitUpdateSignal(int x) {
    emit UpdateSignal(x);
}

然后在你的Bfoo::somemethod()中你需要传递一个对象它会发出信号:

void BFoo::somemethod(Foo &f) {
    f.EmitUpdateSignal(12);
}

然而,注意你在做什么。您发出的信号连接到同一实例中的插槽。这表明设计有缺陷,但如果没有更多的细节,我无法给出任何提示。