- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试遍历两个不同的目录。这两个目录在同一个根目录下 /
.
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;
}
}
}
}
我只能进入列表中的第一个目录 plugins dirs << "plugins" << "core_plugs";
.重新订购dirs << "core_plugs" << "plugins";
,结果是一样的,只是解析了第一个目录,core_plugs。
为什么我会出现这种行为,我怎样才能让它遍历这两个目录。
更新
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();
但是,它不会被捕获。那里太晚了。早于此,我得到的迭代太少。你能建议我如何特别去做吗?
感谢您的回复!
最佳答案
以下是如何遍历 QStringList
使用 C++11 的 range-based for
loop :
const QStringList list { "A", "B", "C" };
for ( const auto& i : list )
{
qDebug() << i;
}
但是,我相信您的问题不在于迭代。您的问题是您正在 cd
进入目录但没有离开它,即 cd("..")
或 cdUp()
.
正如您所说,这两个目录位于同一路径中,即根 /
。所以,在嵌套循环处理完之后,需要回到根路径访问其他目录。
您可以简单地检查cd
函数的结果是否成功。它是一个 bool 函数。但是,在您的情况下,缺少错误处理。有了错误处理,应该是这样的:
if ( dir.cd( path ) )
{
// Do something here...
}
您不必为 cd
函数获取 dirs.at(i).toLocal8Bit().constData()
。它需要一个 QString
。
这是它的签名:
bool QDir::cd( const QString& dirName );
提示:您也可以使用 QDirIterator用于迭代目录。
下面是一个完整的工作示例。
我遵循了这个目录结构:
C:\Test
-- A
---- a.txt
-- B
---- b.txt
代码:
#include <QStringList>
#include <QDebug>
#include <QDir>
#include <cstdlib>
int main( void )
{
const QString root { "C:/Test" };
const QStringList dirs { "A", "B" };
QDir rootDir { root };
qDebug() << "Root Path:" << rootDir.absolutePath();
qDebug() << "Root List:" << rootDir.entryList( QDir::Dirs ) << '\n';
for ( const auto& dir : dirs )
{
if ( rootDir.cd( dir ) )
{
qDebug() << "Dir Path:" << rootDir.absolutePath();
qDebug() << "Dir List:" << rootDir.entryList( QDir::Files ) << '\n';
}
rootDir.cdUp();
qDebug() << "cding...";
qDebug() << "Dir Path:" << rootDir.absolutePath() << '\n';
}
return EXIT_SUCCESS;
}
输出:
关于c++ - 如何遍历 QStringList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44558568/
我有一个 QStringList 获取特定目录中的所有文件,并且所有文件都是由另一个函数创建的,因此,它们是在同一日期创建的。问题是当我在我的 QStringList 中调用“entryList()”
我想知道是否有人知道 Qt 库方法可以采用两个 QStringList 并从第二个列表中删除一个列表中包含的所有字符串。 最佳答案 QList中没有库函数也不QStringList . 但是你可以写你
在我的 C++ GUI 程序中,我在 QString 数组 [6] 中存储了一系列文本(例如 option1、option2、option3、option4、option5、option6)。 现在,
抱歉这个菜鸟问题。我浏览了文档并创建了我自己的 QStringListModel。我需要做的是将 QStringList 的所有条目分配为我的模型的条目(因此将我的模型的私有(private)成员设置
我有一个 QList名为 sortme其中第一个QString在每个QStringList是作为字符串的有效整数,例如: exampleQStringList &v1, const QList &v
我有一个文本文件。我需要将其读入 QStringList。没有行分隔符。我的意思是文本文件中的每一行都在一个新行中。那么无论如何我可以做到这一点吗? 最佳答案 我假设每一行都应该是列表中的一个单独的字
我有一个字符串,我想将其与 QStringList 的内容进行比较。 我的字符串保存在 test[1] 中,我的 QStringList 是 imagez。 我相信 QStringList::cont
我正在尝试编写一个简单的程序,它采用用户输入的全名(例如“Peter Mills”)并根据名字的第一个字母和姓氏的前 4 位数字生成用户名? SO 输出应该是“pmill” 我到底该怎么做。我对 Qt
我创建了一个按钮,单击它时应该通过串行发送命令列表以完成按钮的操作。我在我的 mainwindow.h 文件中定义了我的字符串列表,如下所示: QStringList database_dump =
如何将目录和子目录列表添加到 QStringList? 这就是我所拥有的... QStringList dirList; QDirIterator iterateFolders("/Users/use
修剪字符串列表中所有字符串的最佳方法是什么?我尝试使用 replaceInStrings: QStringList somelist; // ... // // add some strings //
我正在尝试遍历两个不同的目录。这两个目录在同一个根目录下 / . void MainWindow::loadPlugins() { pluginsDir = QDir(qApp -> appl
我有一些 Dialog 类,通过它我可以选择文件和/或目录。在这个对话框中有一个名为 okBtn_clicked 的 fnc,在这个 fnc 中我得到了 QModelIndexes,通过它们我能够创建
如何将数据从 Qstring 列表复制到文本文件以供以后检索?在 Qt 中可以做到这一点吗? 如何使用 QFile 将换行符放入文本字段中,我这样做了 QFile data("output.txt
谁能解释一下,为什么下面的代码根据复制 QStringList 会产生不同的结果: #include #include bool qtTest(bool b) {
这个问题在这里已经有了答案: Can I increment an iterator by just adding a number? (4 个答案) 关闭 6 年前。 我正在开发一个 QStrin
我正在努力寻找一个安全的解决方案(担心迭代器失效)来删除 QStringList 中的一些元素: static QStringList s_listDistantDirs; 我想删除一个元素Curre
我有一个包含很多元素的QStringList,例如: sl.at(i) = name:VAR1 size: 8 Decription:fdgag; 如何将这一行拆分成更多行?我想用 for-loop
在我的 Qt c++ 应用程序中,我有一个包含一组 QString 值的 QStringList!我想随机播放(任意更改 QStringList 中 QString 的位置)。 perl中是否有任何默
我目前正在开发一个小程序,我将计算某个单词在文本中被提及的次数。但我只想在前一个元素是 10 位数字时计算这个词。所以我正在尝试做的是检查迭代器的前一个元素是否包含 10 位数字。但是我不知道如何从迭
我是一名优秀的程序员,十分优秀!