Как использовать цикл foreach на QSignalSpy

Как я могу использовать 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

1

Решение

foreach делает копию пройденного контейнера. QSignalSpy наследуется QObject следовательно, это не может быть скопировано. Эти два факта вызывают ошибку.

Самый простой обходной путь — использовать обычный for петля. Вы также можете создать не-QObject копию списка и использовать ее для итерации:

QList< QList<QVariant> > list = mySignalSpy;
foreach( const QList<QVariant> &args, list ) {
//...
}
7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]