2013-08-02 75 views
1

如何在QSignalSpy上使用foreach循環?如何在QSignalSpy上使用foreach循環

這就是我想做的事:

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 –