gpt4 book ai didi

string - 如果字符串值是其他字符串的一部分,则从 QStringList 中删除字符串

转载 作者:行者123 更新时间:2023-12-02 05:04:01 25 4
gpt4 key购买 nike

如果某个字符串包含在同一列表中的另一个字符串中,我想从 QStringList(下面代码中的文件夹)中删除该字符串。

示例:“/tmp/a/tmp/b /tmp/a/aa/tmp/c /tmp/a/aa/aaa/tmp/d"

我想删除第一个和第三个字符串,因为它们包含在第五个字符串中。我知道如何在 bash 中使用 grep 来完成此操作,但是如何使用 Qt 来完成此操作?

void MainWindow::on_toolButtonSourceFolders_clicked()
{
QString startDir = lineEditStartFolder->text();
QFileDialog* folderDialog = new QFileDialog(this);
folderDialog->setDirectory(lineEditStartFolder->text());
folderDialog->setFileMode(QFileDialog::Directory);
folderDialog->setOption(QFileDialog::DontUseNativeDialog, true);
folderDialog->setOption(QFileDialog::ShowDirsOnly, true);
folderDialog->setOption(QFileDialog::DontResolveSymlinks, true);
QListView *folderList = folderDialog->findChild<QListView*>("listView");
if (folderList) {
folderList->setSelectionMode(QAbstractItemView::MultiSelection);
}
QTreeView *folderTree = folderDialog->findChild<QTreeView*>();
if (folderTree) {
folderTree->setSelectionMode(QAbstractItemView::MultiSelection);
}

folderDialog->exec();
QStringList folders = folderDialog->selectedFiles();
if (!folders.isEmpty())
listWidget->addItems(folders);
}

完整代码可在 https://github.com/FluxFlux/qdir2mod 获取。

最佳答案

正如评论中所指出的,由于目录的最大数量是20,我不会费心优化算法,因此我会选择最简单的:

QStringList folders = folderDialog->selectedFiles();
QStringList outputFolders = folders;
foreach (const QString &folder, folders) {
foreach (const QString &f, folders) {
if (f.contains(folder))
outputFolders.removeOne(folder);
}
}

您也可以避免临时副本,但话又说回来,它会使代码更加复杂,这对于 20 个“文件夹”来说是不值得的。

另外,请注意“文件夹”是一个 GUI 术语。你指的是更通用的文件和目录。最好使用正确的术语,而不要仅仅局限于 GUI 术语。

关于string - 如果字符串值是其他字符串的一部分,则从 QStringList 中删除字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24882153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com