【发布时间】:2021-12-24 01:41:41
【问题描述】:
小例子:
class Foo : public QObject
{
Q_OBJECT
signals:
void
TestSignal(int i) const;
};
class Bar : public QObject
{
Q_OBJECT
public:
Bar(Foo* foo) :
mFoo{ foo }
{}
void
TestEmit(int i) const
{
emit mFoo->TestSignal(i);
}
private:
Foo* mFoo;
};
void
Print(int i)
{
std::cout << i << std::endl;
}
用法:
Foo aFoo;
Bar aBar{ &aFoo };
connect(&aFoo, &Foo::TestSignal, &Print);
aBar.TestEmit(1337);
所以我使用指向Foo 实例的指针从函数Bar::TestEmit 发出信号Foo::TestSignal。这似乎工作正常,但允许吗? (如:可靠的定义行为)。
【问题讨论】:
-
我看不出显示的代码有什么问题。你有什么特别的理由质疑这种行为吗?
-
@G.M.从技术上讲,信号是从它们所属的类的“内部”发出的。所以这可能算作某种滥用,只是碰巧起作用,但不能依赖(?)。只是想确保 - 我在文档中找不到太多关于这种情况的信息。
标签: c++ qt qt-signals