Avoid string-based, dynamic lookup of signals

Qt5 has a new function QMetaMethod::fromSignal() for obtaining
the meta-method that corresponds to a particular signal (member
function).

This also avoids calling the virtual metaObject() function to
resolve the meta-method every time the signal is emitted; it is
known at compile-time which class the signals are defined in,
so it's safe to retain the meta-methods across calls.

Change-Id: I47328ec2dfc335c570fb18bcd304a2ee405bfd6e
Reviewed-by: Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com>
This commit is contained in:
Kent Hansen
2012-06-03 23:06:48 +02:00
committed by Qt by Nokia
parent 9219ba76fd
commit 71e25920da
2 changed files with 23 additions and 23 deletions

View File

@@ -774,16 +774,16 @@ bool CameraBinSession::processSyncMessage(const QGstreamerMessage &message)
}
gst_caps_unref(caps);
static int exposedSignalIndex = metaObject()->indexOfSignal("imageExposed(int)");
metaObject()->method(exposedSignalIndex).invoke(this,
Qt::QueuedConnection,
Q_ARG(int,m_requestId));
static QMetaMethod exposedSignal = QMetaMethod::fromSignal(&CameraBinSession::imageExposed);
exposedSignal.invoke(this,
Qt::QueuedConnection,
Q_ARG(int,m_requestId));
static int signalIndex = metaObject()->indexOfSignal("imageCaptured(int,QImage)");
metaObject()->method(signalIndex).invoke(this,
Qt::QueuedConnection,
Q_ARG(int,m_requestId),
Q_ARG(QImage,img));
static QMetaMethod capturedSignal = QMetaMethod::fromSignal(&CameraBinSession::imageCaptured);
capturedSignal.invoke(this,
Qt::QueuedConnection,
Q_ARG(int,m_requestId),
Q_ARG(QImage,img));
}
}

View File

@@ -443,16 +443,16 @@ static gboolean passImageFilter(GstElement *element,
gst_caps_unref(caps);
}
static int exposedSignalIndex = session->metaObject()->indexOfSignal("imageExposed(int)");
session->metaObject()->method(exposedSignalIndex).invoke(session,
Qt::QueuedConnection,
Q_ARG(int,session->m_imageRequestId));
static QMetaMethod exposedSignal = QMetaMethod::fromSignal(&QGstreamerCaptureSession::imageExposed);
exposedSignal.invoke(session,
Qt::QueuedConnection,
Q_ARG(int,session->m_imageRequestId));
static int capturedSignalIndex = session->metaObject()->indexOfSignal("imageCaptured(int,QImage)");
session->metaObject()->method(capturedSignalIndex).invoke(session,
Qt::QueuedConnection,
Q_ARG(int,session->m_imageRequestId),
Q_ARG(QImage,img));
static QMetaMethod capturedSignal = QMetaMethod::fromSignal(&QGstreamerCaptureSession::imageCaptured);
capturedSignal.invoke(session,
Qt::QueuedConnection,
Q_ARG(int,session->m_imageRequestId),
Q_ARG(QImage,img));
return TRUE;
} else {
@@ -477,11 +477,11 @@ static gboolean saveImageFilter(GstElement *element,
f.write((const char *)buffer->data, buffer->size);
f.close();
static int signalIndex = session->metaObject()->indexOfSignal("imageSaved(int,QString)");
session->metaObject()->method(signalIndex).invoke(session,
Qt::QueuedConnection,
Q_ARG(int,session->m_imageRequestId),
Q_ARG(QString,fileName));
static QMetaMethod savedSignal = QMetaMethod::fromSignal(&QGstreamerCaptureSession::imageSaved);
savedSignal.invoke(session,
Qt::QueuedConnection,
Q_ARG(int,session->m_imageRequestId),
Q_ARG(QString,fileName));
}
}