8
給定一個枚舉:你可以使用Qt foreach循環遍歷每個可能的枚舉值嗎?
enum AnEnum { Foo, Bar, Bash, Baz };
可以遍歷每個枚舉使用Qt的foreach循環?
此代碼不能編譯(不,我預料到......)
foreach(AnEnum enum, AnEnum)
{
// do nothing
}
給定一個枚舉:你可以使用Qt foreach循環遍歷每個可能的枚舉值嗎?
enum AnEnum { Foo, Bar, Bash, Baz };
可以遍歷每個枚舉使用Qt的foreach循環?
此代碼不能編譯(不,我預料到......)
foreach(AnEnum enum, AnEnum)
{
// do nothing
}
如果moced成QMetaEnum比你可以遍歷它是這樣的:使用QNetworkReply這是一個QMetaEnum
QMetaEnum e = ...;
for (int i = 0; i < e.keyCount(); i++)
{
const char* s = e.key(i); // enum name as string
int v = e.value(i); // enum index
...
}
http://qt-project.org/doc/qt-4.8/qmetaenum.html
例子:
QNetworkReply::NetworkError error;
error = fetchStuff();
if (error != QNetworkReply::NoError) {
QString errorValue;
QMetaObject meta = QNetworkReply::staticMetaObject;
for (int i=0; i < meta.enumeratorCount(); ++i) {
QMetaEnum m = meta.enumerator(i);
if (m.name() == QLatin1String("NetworkError")) {
errorValue = QLatin1String(m.valueToKey(error));
break;
}
}
QMessageBox box(QMessageBox::Information, "Failed to fetch",
"Fetching stuff failed with error '%1`").arg(errorValue),
QMessageBox::Ok);
box.exec();
return 1;
}
Qt中foreach
絕對是隻爲Qt容器。它在文檔here中說明。
什麼錯誤消息說? 'enum'類型不是像數據結構那樣的容器來遍歷它的元素。 – Mahesh