微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从函数指针内部发出 Qt 信号?

如何解决如何从函数指针内部发出 Qt 信号?

在实现设备接口时,MyClass 构造函数中有如下代码

pDeviceInstance = new Device()
pDeviceInstance->loadLibrary();
pDeviceInstance->Create(functionpointer)

出现异步事件并调用 functionpointer(我想处理)。

functionpointerpDeviceInstance 都是 static。 我想从 functionpointer 内部发出 Qt 信号,但因为它是 static,所以不可能发出信号。

我试过了:

  1. 使 functionpointer 成为一个 lambda,希望从 lambda 内部发出信号。 但要实现这一点,lambda 需要捕获 this, 并且为了让 lambda 衰减为函数指针,它无法捕获任何内容

  2. 为了使 functionpointerstatic在这种情况下它似乎是 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 举报,一经查实,本站将立刻删除。