gpt4 book ai didi

c++ - 我如何将此信号连接到插槽

转载 作者:行者123 更新时间:2023-11-28 03:18:46 25 4
gpt4 key购买 nike

我想在我的主类 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 的任何建议

最佳答案

当您发出信号时,有必要知道是哪个对象在发出信号。这是因为信号不是实现为不同类之间的消息,而是(可能不同的)类的实例之间的消息。其次,信号是 protected 方法。外部用户无法访问它们。您可以做的是在 Foo 中定义公共(public)方法,它将执行发射:

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

然后在您的 Bfoo::somemethod() 中,您需要传递将发出信号的对象:

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

但是,请注意您在做什么。您发出连接到同一实例中的插槽的信号。这表明存在设计缺陷,但如果没有更多关于您将要实现的目标的详细信息,我无法给出任何提示。

关于c++ - 我如何将此信号连接到插槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16066653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com