2013-08-02 2 views
1

Как использовать петлю 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 

ответ

7

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

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

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

Благодарим вас за объяснение, почему это не удается, а также обходной путь! +1 –