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); gst_caps_unref(caps);
static int exposedSignalIndex = metaObject()->indexOfSignal("imageExposed(int)"); static QMetaMethod exposedSignal = QMetaMethod::fromSignal(&CameraBinSession::imageExposed);
metaObject()->method(exposedSignalIndex).invoke(this, exposedSignal.invoke(this,
Qt::QueuedConnection, Qt::QueuedConnection,
Q_ARG(int,m_requestId)); Q_ARG(int,m_requestId));
static int signalIndex = metaObject()->indexOfSignal("imageCaptured(int,QImage)"); static QMetaMethod capturedSignal = QMetaMethod::fromSignal(&CameraBinSession::imageCaptured);
metaObject()->method(signalIndex).invoke(this, capturedSignal.invoke(this,
Qt::QueuedConnection, Qt::QueuedConnection,
Q_ARG(int,m_requestId), Q_ARG(int,m_requestId),
Q_ARG(QImage,img)); Q_ARG(QImage,img));
} }
} }

View File

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