我想在我的主类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
答案 0 :(得分:2)
发射信号时,必须知道哪个物体正在发射它。这是因为信号不是实现为不同类之间的消息,而是实现(可能不同的)类的实例之间的消息。
其次,信号是受保护的方法。外部用户无法访问它们。您可以做的是在Foo
中定义公共方法,它将进行排放:
void Foo:EmitUpdateSignal(int x) {
emit UpdateSignal(x);
}
然后在你的Bfoo::somemethod()
中你需要传递将发出信号的物体:
void BFoo::somemethod(Foo &f) {
f.EmitUpdateSignal(12);
}
但是,请注意你在做什么。您在同一实例中发出连接到插槽的信号。这表明设计存在缺陷,但如果没有更多有关您将要实现的目标的详细信息,我无法提供任何提示。