Make error checking in QSignalSpy consistent

QSignalSpy's constructor failed gracefully for some problems with the
parameters, but not for null parameters, for which there was only a
Q_ASSERT.  This commit makes the handling of null parameters consistent
with the handling of other errors -- output a meaningful error message
with qWarning() and return, so that isValid() will subsequently return
false.

Change-Id: I7f5677a4c10185e30403ce3e12a022de8c13bc1c
Task-number: QTBUG-14283
Reviewed-by: Rohan McGovern
This commit is contained in:
Jason McDonald 2011-05-12 17:23:14 +10:00
parent e40443f7df
commit d9119535a2
2 changed files with 14 additions and 3 deletions

View File

@ -68,8 +68,15 @@ public:
#else
static const int memberOffset = QObject::staticMetaObject.methodCount();
#endif
Q_ASSERT(obj);
Q_ASSERT(aSignal);
if (!obj) {
qWarning("QSignalSpy: Cannot spy on a null object");
return;
}
if (!aSignal) {
qWarning("QSignalSpy: Null signal name is not valid");
return;
}
if (((aSignal[0] - '0') & 0x03) != QSIGNAL_CODE) {
qWarning("QSignalSpy: Not a valid signal, use the SIGNAL macro");

View File

@ -62,7 +62,11 @@
/*! \fn QSignalSpy::QSignalSpy(QObject *object, const char *signal)
Constructs a new QSignalSpy that listens for emissions of the \a signal
from the QObject \a object. Neither \a signal nor \a object can be null.
from the QObject \a object. If QSignalSpy is not able to listen for a
valid signal (for example, because \a object is null or \a signal does
not denote a valid signal of \a object), an explanatory warning message
will be output using qWarning() and subsequent calls to \c isValid() will
return false.
Example:
\snippet doc/src/snippets/code/doc_src_qsignalspy.cpp 4