Как я могу использовать foreach
петля на QSignalSpy
?
Вот что я хочу сделать:
foreach( const QList<QVariant> &args, mySignalSpy )
{
Q_ASSERT( args.count() == 2 );
QVariant arg0 = args[0];
QVariant arg1 = args[1];
doSomething( arg0, arg1 );
}
Это ошибка, которую я получаю:
/usr/local/Trolltech/Qt-4.8.2-shared/include/QtTest/qsignalspy.h: In instantiation of ‘QForeachContainer<T>::QForeachContainer(const T&) [with T = QSignalSpy]’:
MyTester.cxx:843:64: required from here
/usr/local/Trolltech/Qt-4.8.2-shared/include/QtCore/qobject.h:333:5: error: ‘QObject::QObject(const QObject&)’ is private
foreach
делает копию пройденного контейнера. QSignalSpy
наследуется QObject
следовательно, это не может быть скопировано. Эти два факта вызывают ошибку.
Самый простой обходной путь — использовать обычный for
петля. Вы также можете создать не-QObject копию списка и использовать ее для итерации:
QList< QList<QVariant> > list = mySignalSpy;
foreach( const QList<QVariant> &args, list ) {
//...
}
Других решений пока нет …