【发布时间】:2021-03-01 20:56:28
【问题描述】:
我正在寻找一种优雅的模式来跟踪类的所有实例的事件。所以理论上应该可以直接或在静态方法中从类中发出信号(当时似乎没有必要),因为:
connect() 方法声明了一个发送者和它的签名。在这种情况下,它可能是类。对发件人没有特定的期望。据我了解,信号本身是事件堆栈上的一个对象,面向发送者。生成的位置无关紧要(在静态或非静态上下文/方法中)。
一般来说:将信号声明为静态函数可能会出现什么问题,而不是期望对象发出信号,它是类的有效实例。
现在已经可以通过同一类的辅助实例(例如第一个实例)(可通过类中的静态公共指针引用)或澄清特定的辅助类实例。然后必须连接到那个静态指针,并通过它来听所有的。然后每个实例通过它间接发射
helperInstance->staticEmit(signalFoo,this);
所以问题是:是否有更直接/优雅的方式或者 QT 应该对此进行研究?
【问题讨论】:
-
从你的问题中我不清楚你是否真的尝试过声明一个信号是静态的?
-
好点,其实没试过,但正如moc中预期的那样:error: 'this' is available for static member functions QMetaObject::activate(this, &staticMetaObject, 0, _a);