在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
接受的相同类型的参数作为其第二个参数?