通过包装QObject :: connect等待信号

时间:2015-03-05 16:56:05

标签: c++ qt

在Qt5.2.0中,我尝试编写一个waitForSignal函数,该函数接受与QObject::connect相同的一些参数。它应该连接一次,等待信号发生,然后断开信号并返回。这是我到目前为止所做的(没有编译):

static void waitForSignal(
    const QObject *sender,
    const QMetaMethod &signal)
{
    QWaitCondition condition;
    QMutex mutex;

    QMetaObject::Connection conn =
    QObject::connect(sender, signal, nullptr, [&condition, &mutex]() -> void
    {
        mutex.lock();
        condition.wakeOne();
        mutex.unlock();
    });

    mutex.lock();
    condition.wait(&mutex);
    QObject::disconnect(conn);
}

应该像这样调用:

class A;

class Q : public QObject
{
    Q_OBJECT
signals:
    void someSignal(A &a);
}

waitForSignal(obj, &Q::someSignal);

我不想使用SIGNAL宏(并因此使waitForSignal的第二个参数为const char *),因为如果信号的签名发生变化,它可能在运行时失败

当我通过QObject::connect()时,如何接受&Q::someSignal接受的相同类型的参数作为其第二个参数?

0 个答案:

没有答案