如何解决如何从函数指针内部发出 Qt 信号?
pDeviceInstance = new Device()
pDeviceInstance->loadLibrary();
pDeviceInstance->Create(functionpointer)
出现异步事件并调用 functionpointer
(我想处理)。
functionpointer
和 pDeviceInstance
都是 static
。
我想从 functionpointer
内部发出 Qt 信号,但因为它是 static
,所以不可能发出信号。
我试过了:
-
使
functionpointer
成为一个 lambda,希望从 lambda 内部发出信号。 但要实现这一点,lambda 需要捕获this
, 并且为了让 lambda 衰减为函数指针,它无法捕获任何内容。 -
为了使
functionpointer
非static
但在这种情况下它似乎是MyClass
的函数指针 这是不同的类型。
因此,在我从 functionpointer
内部发出 Qt 信号的计划中,我的选项用完了。
有什么我在这里遗漏的吗?
解决方法
完全没有问题。将 QObject
与您希望作为 qApp
(QApplication::instance
) 的孩子的信号挂钩,然后通过全局 qApp
指针使用它:
class MySignaler : public QObject {
Q_OBJECT
public:
MySignaler(QObject *parent = nullptr) : QObject(parent) {
setParent(qApp);
}
Q_SIGNAL void deviceActivity();
static bool emitDeviceActivity() {
if (!qApp) return false;
auto *self = qApp->findChild<MySignaler*>();
if (!self) return false;
emit self->deviceActivity();
return true;
};
int main(int argc,char *argv[]) {
QApplication app(argc,argv);
MySignaler signaler;
Device device;
device.loadLibrary();
device.create(&MySignaler::emitDeviceActivity);
// ...
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。