I'm trying to iterate through two different directories. The two directories are on the same root /
.
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;
}
}
}
}
I'm only able to go into the first directory plugins in the list dirs << "plugins" << "core_plugs";
. With a re-order dirs << "core_plugs" << "plugins";
, the results are the same, and only the first directory, core_plugs is parsed.
Why am I getting this behavior, and how can I make it iterate through both directories.
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();
}
}
Following Azeem's suggestion, I updated my attempt as shown above. I tried to cdUp();
after the foreach
i.e:
foreach() {} pluginsDir.cdUp();
But, it doesn't get caught. It's too late there. Sooner than that and I get too few iterations. Could you please suggest how I can particularly go about it?
Thank you for the response!