我想通過兩個不同的目錄迭代。這兩個目錄位於相同的根目錄/
。如何遍歷QStringList
void MainWindow::loadPlugins()
{
pluginsDir = QDir(qApp -> applicationDirPath());
#if defined(Q_OS_WIN)
if (pluginsDir.dirName().toLower() == "debug" || pluginsDir.dirName().toLower() == "release")
pluginsDir.cdUp();
#elif defined(Q_OS_MAC)
if (pluginsDir.dirName() == "MacOS") {
pluginsDir.cdUp();
pluginsDir.cdUp();
pluginsDir.cdUp();
}
#endif
QStringList dirs;
dirs << "plugins" << "core_plugs";
QList<QObject *> loadedPlugs;
for (int i = 0; i < dirs.size(); ++i)
{
cout << dirs.at(i).toLocal8Bit().constData() << endl;
pluginsDir.cd(dirs.at(i).toLocal8Bit().constData());
foreach (QString fileName, pluginsDir.entryList(QDir::Files)) {
QPluginLoader loader(pluginsDir.absoluteFilePath(fileName));
QObject *plugin = loader.instance();
qDebug() << "NAME :: " << fileName;
if (plugin && !(loadedPlugs . contains(plugin))) {
loadedPlugs << plugin;
dirs . removeAt(i);
} else {
continue;
}
}
}
}
我只能夠進入的第一個目錄插件列表dirs << "plugins" << "core_plugs";
。重新訂購dirs << "core_plugs" << "plugins";
後,結果相同,只解析了第一個目錄core_plugs。
爲什麼我得到這種行爲,以及如何通過這兩個目錄進行迭代。
UPDATE
void MainWindow::loadPlugins()
{
pluginsDir = QDir(qApp -> applicationDirPath());
#if defined(Q_OS_WIN)
if (pluginsDir.dirName().toLower() == "debug" || pluginsDir.dirName().toLower() == "release")
pluginsDir.cdUp();
#elif defined(Q_OS_MAC)
if (pluginsDir.dirName() == "MacOS") {
pluginsDir.cdUp();
pluginsDir.cdUp();
pluginsDir.cdUp();
}
#endif
QStringList dirs;
dirs << "plugins" << "core_plugs";
QList<QObject *> loadedPlugs;
for (int i = 0; i < dirs.size(); ++i)
{
pluginsDir.cd(dirs.at(i).toLocal8Bit().constData());
foreach (QString fileName, pluginsDir.entryList(QDir::Files)) {
QPluginLoader loader(pluginsDir.absoluteFilePath(fileName));
QObject *plugin = loader.instance();
if (plugin && !(loadedPlugs . contains(plugin))) {
populateRevPlugins(plugin);
loadedPlugs << plugin;
}
}
qDebug() << pluginsDir . absolutePath();
pluginsDir.cdUp();
qDebug() << pluginsDir . absolutePath();
}
}
繼@ Azeem的建議,我更新了我的企圖,如上圖所示。我試圖cdUp();
的foreach
即後:
foreach() {} pluginsDir.cdUp();`
,但它不被逮住。那裏太晚了。比這更快,我得到的迭代太少。你能否建議我可以特別關注它?
謝謝你的迴應。
爲什麼這麼晚?而且,「它不會被抓到」是什麼意思? – Azeem
我無法迭代到第二個目錄。 'pluginsDir.cdUp();'工作,並且目錄改變,但第二個目錄沒有迭代。在迭代結束後,似乎會發生'cdUp'。 –
下面是你的代碼的精簡版:http://ideone.com/H3qY81,它工作正常!你需要檢查'cd'是否有錯誤處理。 – Azeem