0

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

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

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

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

我试过了:

  1. 制作functionpointer一个 lambda,希望从 lambda 内部发出信号。但要做到这一点,lambda 需要捕获this,并且为了让 lambda 衰减到函数指针,它不能捕获任何东西。

  2. functionpointer非但static在这种情况下,它似乎是一个MyClass 不同类型的函数指针。

所以,我的计划中从functionpointer. 我在这里有什么遗漏吗?

4

1 回答 1

0

根本不是问题。将 aQObject与您希望作为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);
  // ...
}
于 2021-03-10T18:22:34.450 回答